분야에 상관없이, 항상 데이터셋이 중요하고 그 안에 있는 여러 데이터의 분포가 중요하다고 생각합니다.


이 글은 통계의 아주 기초인 Random Sampling과 가설검정에 대해 간단히 정리한 글입니다.





Random Sampling


우리가 배우는 통계나 확률에서는 간단한 예시를 들어 설명하기 때문에 분포라던가 평균, 분산에 대해서 알기 쉽습니다. 하지만 현실에선 구하기도 어려울 뿐더러 알 방법이 거의 없죠. 그래서 분포를 추정하기 위해 하는 것이 Sampling 기법입니다. 

물론 Sampling을 통해 실제 분포와 내가 아는 분포를 100%는 아니지만 어느정도 가깝게 근사시키는 방법은 여러가지가 있습니다. (글 외의 내용)



예를 들어봅시다. 우리가 모르는 어떤 모집단이 있다고 가정하겠습니다.


우리는 전체 모집단의 '무언가'(보통 평균 또는 분산) 를 알고 싶습니다. 하지만 전체 모집단에 대해서 아는 것이 없기 때문에 Sampling을 진행하게 됩니다. 이를 무작위 표본이라고 정의합니다.


무작위 표본은 두 가지 특성을 가집니다.


1. 동일한 분포인가? Yes 

-> 우리가 뽑은 샘플-1 과 샘플-2는 구별될 수 없기 때문입니다.

예를 들어서, 성인 100명의 키를 측정한다고 했을때, 샘플을 뽑아서 측정을 해보면 거의 차이가 없을 것입니다.


2. 독립적인가? No 

-> 각 샘플들은 독립적이지 않습니다. 왜냐하면 모집단에 영향을 끼칠 수 있기 때문이죠. 하지만 무작위 표본의 특성은 독립적이어야 합니다. 이는 모집단이 매우 커졋을 때 해결할 수 있습니다.


정리하자면, Random Sampling은 독립적이고 동일한 분포를 갖는 동일한 모집단에서 선택된 표본입니다.


설명한 것은 가장 기초인 Random Sampling이고, machine learning에 자주 사용되는 Gibbs Sampling, MH 알고리즘 등은 추후에 쓰도록 하겠습니다.





Hypothesis


어떠한 방법을 통해 모집단의 평균, 분산이 아닌 표본의 평균과 분산을 알게 되었다면, 가설을 통해서 이를 검정할 수 있어야합니다. 


가설은 두 가지로 정의됩니다.


1. 귀무가설 H0

2. 대립가설 또는 연구가설 H1


우리가 알고싶은 어떤 가설에 대해 연관있는 무작위 표본을 선택하여야 합니다. 무작위 표본을 선택하라는 의미는 반복적으로 실험하라는 의미와 동일합니다.


예를 들어, 표본 평균을 검정하게 된다면 밑과 같은 식을 사용하게 됩니다.



이 식은 표본크기와 분산에 영향을 받게 됩니다. 또한, 이를 신뢰구간이라 부릅니다.


쉽게 설명하자면, 표본을 100개 뽑앗을 때, 이러한 표본들은 일정한 구간을 가지게 될 것이고 평균을 가지게 될 것입니다.. 또한, 우리가 설정한 유의수준이 95%라고 가정하였을 때, 표본 평균이 100개 중 95개가 내가 정한 일정한 구간안에 들어와 있음을 의미합니다.


신뢰구간이 표본크기와 분산에 영향을 받는 이유입니다.


표본크기가 클수록, 분산이 작을수록 내가 설정한 신뢰구간에 '무언가'가 많이 분포되어 있어 귀무가설이 힘을 얻고, 그렇지 않다면 연구가설이 힘을 얻는 것이라고 생각해볼 수 있습니다.



-> 파란색 구간은 우리가 설정한 신뢰구간, 막대바는 표본의 신뢰구간(중간은 평균이라고 생각하면 될 것 같네요)



이 신뢰구간은 표본의 크기가 크면 클수록 정규분포를 따르게 됩니다. 예를 들어, 95%의 유의수준에서는 k값이 1.96이 되죠.

표본의 크기가 작으면서 normal하지 않을때는 t분포를 따르게 됩니다. 이를 t-statistics라고 부를 수 있습니다. 다음 그림과 같이 n-1의 자유도를 가집니다.




검정을 하고 나면 주로 p-value를 관찰하여 판단하게 됩니다. 


p-value : 우리가 설정한 귀무가설에 반하여 극단적인 값이 나올 확률


예를 들어 보겠습니다.


유의수준 95%에서


H0 : A가 맞다.

H1 : A가 아니다.

라고 가설을 설정한 뒤, 검정을 시행할 것입니다.


첫번 째 경우는 p-value가 0.2가 나왔을 경우입니다.

 p-value가 0.2라는 뜻은 우리의 모집단에서 A가 아닌 것이 나올 확률이 20%라는 의미로 이해하면 쉽습니다. 따라서, 유의수준 95%에 비해 극단적인 확률값이 아니므로 귀무가설을 기각할 수 없습니다. (귀무가설 자체가 연구가설을 포함하고 있는 가설인 셈이죠)


두번 째 경우는 p-value가 0.001이 나왔을 경우입니다.

p-value값이 0.001이 라는 것은 우리의 모집단에서 A가 나올 확률이 0.1%라는 것입니다. 하지만 test결과, 모집단에서 A가 나왓기 때문에 우리의 모집단이 가지고 있는 귀무가설이 이를 설명할 수 없다는 것이죠. 따라서, 귀무가설을 기각하고 새로운 가설을 설정해야 합니다.

정리하자면,

이는 유의수준 95%에 비해 상당히 극단적인 값이 나왔으므로, 우리의 모집단에서 설정한 귀무가설이 연구가설을 포함하고 있지 않다고 설명할 수 있습니다. 따라서 귀무가설을 기각할 수 있습니다.


(쉽게 설명하려고 한 것이 오히려 더 헷갈리게 하는 것일 수 있습니다. 다른 블로그도 참조하시면 좋을 것 같습니다^^. )



이상으로 기초중의 기초인 Random Sampling과 가설에 대해 설명해 보았습니다. 추가로 1종과오와 2종과오를 간단히 설명하면서 글을 마치겟습니다.




1종 과오 & 2종 과오


1종 과오 : 귀무가설이 참이지만 이를 기각한 것.

2종 과오 : 귀무가설이 참이 아니지만 이를 기각하지 못한 것.


보통 1종과오를 생산자 과오, 2종과오를 소비자 과오라고 부릅니다. 예를 들면,


양품인데 불량이라고 판정을 함 -> 1종 과오 : 불량으로 인식하여 양품 하나를 버리게 되므로 생산자에게 손해가 가는 것이죠.

불량인데 양품이라고 파정을 함 -> 2종 과오 : 불량품이 양품으로 판정되기 때문에 소비자에게 피해가 가게 됩니다.




감사합니다.

'# 기타 공부한 것들 > math' 카테고리의 다른 글

Set theory  (0) 2018.07.26
Local Minimum, Local Maximum  (0) 2018.06.21
Convexity(2)  (3) 2018.06.20
Convexity(1)  (4) 2018.06.20
Duality Thorey  (0) 2018.06.19

오늘도 예제를 하면서 알게 된 몇 가지 사실을 적도록 하겠습니다.

notifyDataSetChanged();

저번에 setAdapter을 onResume부분에 편의상 해두었는데요. 사실 notifyDataSetChanged()가 더 편해요.. ;;

갱신되거나 삭제되었을 때 알려주는 메소드입니다.

구글링 해보니 안먹는 경우도 있다고 한다.


Super.onBackPressed()의 위치

제가 원하는 것은 BackPress를 눌렀을 때 데이터를 intent에 넣어서 전송하는 것이었습니다.

근데 BackPressed 내부에 보시면 super로 부모를 상속하는 것을 볼 수 있습니다. 바로 이 부분이 종료하는 시점이 됩니다.

즉, 눌렀을 때 데이터를 intent에 넣어주고 싶다면, super.onBackPressed()를 맨 아래쪽에 두어야 정상 작동할 거에요.

이런 식으로 맨 밑에 두어야 위의 코드가 정상 작동 됩니다.


ArrayList 초기화

(1) 리스트 초기화

contents 는 ArrayList입니다.

(2) ArrayList 초기화하는 방법 두번째

ArrayList를 사용할 때, add를 굳이 사용하지 않고 간단하게, 한번에 초기화시키고 싶을 때가 있습니다.

이런식으로 하시면 됩니다.

ex)

ArrayList<String> test = new ArrayList<>(Arrays.asList("a", "b", "c"));

또한, Collection을 사용해도 된다고 합니다.

이 사항에 관해서는 더 알고 싶으시다면

>> https://code.i-harness.com/ko/q/f5611

 

 

'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Nevigation View 만들기  (0) 2018.07.26
Toobar, appbar 경계선 없애기  (0) 2018.07.25
Fragment(프래그먼트) 만들기  (0) 2018.07.15
(MAC) Android Studio 단축키  (0) 2018.07.01
Android Project Review with BP(1)  (0) 2018.06.16

ListView를 만들어보는 예제를 해보았습니다. 몇 가지 알게 된 점을 적도록 하겠습니다.


예제의 순서는 이렇습니다.


메인 액티비티 <- Custom ListView inflation <- Data Set


의 순서로 구성되어 있습니다.


ListView는 기본적으로 Adapter를 부착시켜 item들을 뿌려준다고 생각하시면 쉽습니다.


View로서의 역할만 해주는 것이죠. 그래서 코드에서는 Adapter가 View를 인식시키도록 코드를 짜야합니다. 그 부분이 getView부분입니다.


Adapter 부분은 BaseAdapter을 상속받았고, 필요한 것들은 자동으로 implementation을 이용하시면 됩니다.



가장 중요한 부분은 getView부분입니다. getView에서는 자신이 등록한 ArrayList의 아이템을 각각가져와서 inflate해주게 됩니다.


( 이 부분에서 겪었던 오류는 여러분이 implementation하면 getCount도 자동으로 Override해주게 되는데, return 0으로 기본값이 설정되어 있을겁니다. 이것을 size대로 변경시켜주지 않고 그대로 실행시키면 getView 부분에서 getCount를 가져오는지 확인은 해보지 않았지만, 아무리 아이템을 등록해주어도 결국 0으로 인식하는 것을 볼 수 있습니다. 실제로 Adapter에 등록조차 되지 않더군요. -> 확인 필요)


CustomList를 만들고 inflate해주는 부분입니다. (R.layout.listview_items 는 custom ListView입니다.)




다음 사진은 Custom List View에 데이터를 입력시켜주는 부분 중 일부입니다.




또한, ListView에 갱신하는 부분에서 notify method를 사용하지 않아도 



onResume부분에 다시 Adapter를 부착시키면 갱신시킬 수 있다는것을 확인하실 수 있습니다. ( 추천드리진 않습니다. 많이 좋지 않은 방법입니다. 편의상 해놓은 것이에요)


다른 기본적인 예제는 구글링하시면 쉬운예제가 많아 설명하지 않았고, 예제를 해보면서 겪은 현상을 정리하였습니다.




'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Nevigation View 만들기  (0) 2018.07.26
Toobar, appbar 경계선 없애기  (0) 2018.07.25
Fragment(프래그먼트) 만들기  (0) 2018.07.15
(MAC) Android Studio 단축키  (0) 2018.07.01
Android Project Review with BP(2)  (0) 2018.06.18

 

크롤링을 진행해 보면서 얻은 결과 정리(고급 기술 X)

트위터

-트위터 api 키 얻기

https://apps.twitter.com

 

-기본적인 트위터 크롤링의 방법을 얻을 수 있는 곳.

http://www.dealingdata.net/2016/07/23/PoGo-Series-Tweepy/#search

 

- 트위터는 정책상으로 인해 현재 날짜로부터 10일 이외의 날은 받을 수 없습니다. 그 외의 결과를 원한다면 돈을 지불...

 

- 대표적으로 tweepy가 있는데, 위처럼 since, until과 같은 파라미터가 있었으나 정책 변경 이후, 업데이트로 인해 없어진 상황

(API에는 공식적으로 없지만, 직접 사용하면 적용이 됩니다.)

 

- TweepError해결

- tweepy사용 시 구글에 돌아다니는 예제 중에서 OR문을 쓰는 예제가 있습니다. 테스트 해본 결과 생각보다 원하는 결과를 얻기 힘들거라고 예상해봅니다. 따라서 저는 OR문 보다는 ['1', '2']의 형식을 사용하였습니다.

- 위의 형식을 사용하다 보면 약간의 불만을 가질 수 있습니다. 제가 DB쪽 지식(?)이 부족해서 그런진 몰라도?? 'machine learning' 과 '#machine learning'의 결과는 다릅니다. 하지만 'machinelearning'과 '#machinelearning'의 결과는 같다는 걸 확인하였습니다(user ID 비교함)

***************************************************************************************************

크롤링을 이용한 분석부터 끝까지는 이 사이트를 참고하면 좋을 것 같다.

http://miniddong.me/2016/11/12/zika-tweet-lda/

 

***************************************************************************************************

 

페이스북

-페이스북은 그룹 페이지의 타임라인을 분석할 수 있게끔 api를 제공하고 있으나, 타인의 타임라인을 탐색하는 것은 안되도록 하고 있다.

-페이스북 api 키 얻기

https://developers.facebook.com/tools/explorer

 

-페이지의 글은 크롤링 할 수 있다. 단, 페이지의 access key를 받아야 함.

 

 

 

'# 기타 공부한 것들 > 파이썬_etc.' 카테고리의 다른 글

파이썬 언어의 기본 etc  (0) 2019.02.01
파이썬 함수 all(), any()  (0) 2019.01.16
windows docker 설치하기  (0) 2019.01.11
cv2를 이용한 이미지 관련  (0) 2018.12.08
Anaconda 가상환경 설치법  (0) 2018.10.26