## 단순 선형회귀분석 모의실험
   # 미리 정해둔 모수( beta0, beta1, sigma )에 대해 생성한 데이터로 추정하고 맞는지 확인하기

beta0 = 2.5
beta1 = -3
sigma = 4
x = rnorm(100, 10, 4)
y <- beta0 + beta1 * x + rnorm(100, 0, sigma)
data <- data.frame( x,y )
plot(y~x, data)

 

 

# LSE
n=nrow(data)  # obs
Sxx = sum( (x-mean(x))^2)
Sxy = sum((x-mean(x))*(y-mean(y)))

Beta1H = Sxy/Sxx
Beta0H = mean(y)-Beta1H*mean(x)

yH = Beta0H + Beta1H*x
s = sqrt(sum((y-yH)^2)/(n-2))

SE_Beta1H = s/sqrt(Sxx)
SE_Beta0H = s*sqrt(1/n + mean(x)^2 / Sxx )

summary(lm(y~x, data))

  # 직접 구한 결과가 모델에서 구한 결과와 같음을 알 수 있다.
  # 실제 정한 모수와 추정값이 꽤 다른 이유는 표준편차가 크기 때문이다.(sigma=4)

 

 

# 분산분석 in reg
  # ANOVA table
SST = sum((y-mean(y))^2)
SSR = sum((yH-mean(y))^2)
SSE = SST-SSR
R2 = SSR/SST
cor(x,y)^2  # 단순선형회귀에서 R^2값은 상관계수의 제곱과 같음

MSR=SSR/1
MSE=SSE/(n-2)
F=MSR/MSE
pvalue=1-pf(F,1,n-2)

SS=c(SSR, SSE, SST)
df=c(1, n-2, n-1)
MS=c(MSR, MSE, 0)
F=c(F, 0, 0)
pvalue=c(pvalue, 0, 0)
AOV_table=cbind(SS, df, MS, F, pvalue)

summary(lm(y~x, data))

## 잔차 분석
e=y-yH
mean(e)
sd(e)
hist(e)
plot(y,e)


 

## plotting
mod <- lm(y~x, data)
plot(mod)

 



25 Open Datasets for Deep Learning Every Data Scientist Must Work With

https://www.analyticsvidhya.com/blog/2018/03/comprehensive-collection-deep-learning-datasets/



Cheat Sheet of Machine Learning and Python (and Math) Cheat Sheets

https://medium.com/machine-learning-in-practice/cheat-sheet-of-machine-learning-and-python-and-math-cheat-sheets-a4afe4e791b6

유튜브에서 유용한 통계 영상

http://flavioazevedo.com/stats-and-r-blog/2016/9/13/learning-r-on-youtube
https://www.datasciencecentral.com/profiles/blogs/109-commonly-asked-data-science-interview-questions?utm_content=bufferbfa26&utm_medium=social&utm_source=plus.google.com&utm_campaign=buffer



* 앙상블이라는 말은 많이 들어봤지만 머릿 속에 구체화 되지 않았다.


https://www.kaggle.com/erikbruin/titanic-2nd-degree-families-and-majority-voting

다음 게시글에서 "타이타닉 생존 문제"에 대한 분석을 보며 약간의 직관적인 이해를 할 수 있었다.


 - 준비 RF, SVM, GBM(Gradient Boosting Machine)의 3가지 방법을 사용할 때,

   1) 3가지 모델을 통해 결과를 출력하고, 다수결에 의해 최종 생존여부를 결정한다.

   2) 3가지 모델 중 가장 예측력이 좋다고 생각되는 1개의 모델을 선정하고,

       그것을 기준으로 하되, 나머지 2개의 모델이 모두 상반된 결과를 예측하면 이를 따른다.

   3) 각 변수마다 다른 최적의 모델을 결정한다.


등 과 같은 방식으로 앙상블을 구체화한 것을 확인했다.

1. 원격저장소(Remote Repository <--> Local)


  1) 버전 or 소스코드를 백업한다.

  2) 다른 사람과 협업이 가능하다.

      >> 프로젝트가 커지는 과정에서 중요한 역할을 한다.

           단, 혼자서 작업한다면 dropbox나 google drive의 스토리지를 사용해도 충분하다.




2. 원격저장소의 기초


  - git init local >> cd local

  - cd .. : 부모 디렉토리로 간다 (상위 폴더로)

  - git init --bare : 작업을 할 수 없고, 저장소로서의 기능만 수행한다. >> 수정이 불가능하게 하는 역할

  - git remote add origin [ 주소 ]

  - git remote remove origin : 지정된 origin을 지운다.

  - git branch : 현재의 branch를 확인한다.

  - git push --set-upstream origin master : 원격 브랜치 사이에 연결하기




3. 원격 저장소를 지역 저장소로 복제(Github)


  1) 원격저장소를 제공

  2) 오픈소스 프로젝트를 제공


  - 일단 이미 존재하는 프로젝트를 컴퓨터로 끌고오는 방법을 알아보자.


1. 깃허브란? 

      - 버전관리 시스템(Version Management, not by changing the file name)

      - 효용 : Backup, Recovery, Collaboration

      - 본질 : 변경사항을 관리한다.

      >> 깃은 어렵다.

           그래서 Dropbox나 Google Drive를 통해서도 가능하다.(쉽게)

           Dropbox는 버전관리 시스템을 일반인이 쉽게 사용하기 위해 만들어진 것이다



2. 왜 깃이 어려운가요??

      - 실제 프로젝트의 코드가 복잡할수록 깃을 공부하는 것이 효율적이다.

      - 실제로 깃이 내가 하고자하는 것보다 훨씬 어렵게 여겨질 수 있다.

      >> 자신의 상황에 알맞게 사용할 것




============================================================


1. 설치



2. 저장소 만들기

   - pwd : 현재 위치를 알려준다

   - cd : 위치 찾아가기

   - mkdir : 새로운 디렉토리를 만든다.


   - git init : 현재 디렉토리를 git의 (버전) 저장소로 만든다.

                이 때 .git 이라는 파일이 생기는데, 이것은 버전정보를 저장하고 있으므로 절대 지우면 안된다!!



3. git이 관리할 대상 파일 지정하기

  - vim [ 파일명 ] : 파일을 생성한다.

  - git add [ 파일명 ]

  - git status



4. 버전 만들기

  - version : 의미있는 변화를 뜻함


  - git config --global user.name ""

  - git config --global user.email ""

    >> 작가를 지정해주는 것과 같음 / 최초에 한 번만 필요


  - git commit >> vim화면 사용

    * vim화면에서?

      - "i" : 입력가능하게 해준다. 나올때는 ESC

      - 완전히 vim에서 나오려면 ":wq"를 입력한다.


  - git에서 새로운 파일이 생겼을 때, 버전관리를 명명할 때는 add 명령어를 쓴다.

  - 또한, git에서 이미 있는 파일에 수정버전 관리를 명명할 때도 add 명령어를 쓴다.


  - git log : 이 때까지의 변경사항을 볼 수 있다. (q키를 통해 나올 수 있음)



5. stage area

  - git add 기능을 통해 선택적인 commit을 가능하게 한다. : Git의 혁신

  - stage area : add를 통해 만든 commit 대기상태



6. 변경사항 확인하기

  - git log의 옵션을 통해 활용이 가능하다.

     1) git log -p : 이전 commit과의 차이점을 보여준다.(historical)

     2) git diff commit ID_1 commit ID_2 : 두 commit 간의 차이를 보여준다.

     3) 작업 후 git diff : 어떠한 작업을 했는지 확인 가능 (commit 전 마지막으로 review 가능)

         - add 한 후에는 안보인다.



7. 과거버전으로 돌아가기

  - 어렵고, 굉장한 주의가 필요하다.

  - git reset commit ID --hard : 해당 commit ID를 최신으로 한다.

    >> 실제로는 남아있고, 복구가 가능하다.

         그러나 공유한 이후에는 reset을 절대로 해선 안된다.

         hard는 조금 위험한 reset 방법

  - git revert : 취소하면서 새로운 버젼을 만들 수 있다.

  >> 그냥 있다는 것 정도만 알아두고, 나중에 더 공부해서 사용할 것..



8. 명령의 빈도 & 매뉴얼

  - git commit --help : 옵션에 대한 도움말을 얻을 수 있다.

  - git commit -a : 바로 add를 실행한다.

  - git commit -m "commit message" : commit message를 editor를 안켜고 바로 실행할 수 있다.



코드를 블로그 타입으로 관리하고 좋고,


특히 협업이 좋아 개발자들이 많이 사용한다는 Git-Hub의 사용법을 찾아보았다.




우습지만, 한참을 해매다 더듬더듬 찾아가고있다.


가입부터 프로필 수정 등등 아직도 모르는 것이 많지만, 그나마 알게된 것을 잊기 전에 기록하고자 한다.





특히, 윈도우라서 Git Bash를 다운 받아 커맨드 형식으로 폴더와 파일을 관리하는 것이 낯설고 어렵게 느껴졌다.

 - git init : initialize

 - ls : 폴더 내의 전체 목록

 - git status : 상태 보기

   ㄴ 수정된 파일이나 새로 생성된 파일 / 업로드 여부 등을 살필 수 있다.

 - git remote add origin git@github.com:Statart/Hello-GitHub.git

   ㄴ 나의 깃 repo와 연결하기(원래 깃 사이트에서 복사해 넣을 수 있다.)

 - git add 파일명 : 해당 파일을 깃에 추가한다.

   git add . : 폴더 안의 모든 파일을 깃에 추가한다.

 

 - git config --global user.email "@naver.com"  : 깃에 자신의 e-mail 정보 입력

 - git config --global user.name "statart"          : 깃에 자신의 ID 정보 입력

 - git commit -m '____'



## 근데 깃허브 ssh 지정하는 것에서 포트22 에 대한 방화벽 문제가 생김....

     학교 와이파이를 사용해서 그런 것 같은데... 어떻게 해결해야하는지 모르겠음..ㅠㅠ




* 참고한 주소들

   1) https://www.inflearn.com/course/github-%EA%B8%B0%EB%B3%B8%EA%B8%B0-10%EB%B6%84/

   2) https://backlog.com/git-tutorial/kr/intro/intro4_1.html

   3) https://nolboo.kim/blog/2013/10/06/github-for-beginner/



=====================================================================


깃허브 공개키 지정하기


참고) 

  1) http://www.whatwant.com/395

  2) http://ourcstory.tistory.com/112


1. tensorflow를 활용한 linear regression 적용 방법 및 cost minimization


    1) 생각보다 익숙하지 않은 방식의 코딩


    2) 라이브러리 설치하기

        - 특히 matplotlib 패키지가 import 되지 않아 고전했다.

        - 여러 방법을 검색하고 시도했지만 되지 않음.


        - 그러다가 방법을 찾음 (출처 : 아래에 명시 )

        - pycharm에서 [File] - [Settings]에 접속

          Project 탭에서 Interprete에서 matplotlib를 검색하고 install할 수 있다.





2. python에서 tensorflow를 활용한 Gradient Descent

  

  1) Gradient Descent : Cost 함수의 최소값을 찾기 위한 방법


  2) 손으로 미분해서 구한 것과 tensorflow에서 제공하는 minimize를 모두 해보고 

     비교할 수 있음.


  3) 추가로, 중간에 Gradient를 수정할 수도 있음.













출처 :  http://www.polarglow.com/2017/07/04/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%84-%ED%95%98%EB%82%98%EB%8F%84-%EB%AA%A8%EB%A5%B4%EB%8A%94-%EC%82%AC%EB%9E%8C%EC%9D%98-%EB%94%A5%EB%9F%AC%EB%8B%9D-anaconda-python-3-6-matplotlib-pyplot-import/



- 본 게시글은 홍콩과기대 김성훈 교수님의 "모두를 위한 머신러닝" 강의를 보고 개인 공부용으로 작성된 것입니다.



* Tensorflow의 작동방식


  1) Build graph(tensor) using TF operations

      - node / placeholder


  2) feed data and run gragh (operation)

      - sess.run(op, feed_dict={a:[1,3]} )


  3) update variables in the graph (and return values)


  - 예전에 SAS EM을 다룰 때 이미지로 되어있던 과정과 유사한 듯





* 데이터 입력


   1) node1 = tf.constant(3.0, tf.float32)

       - 위의 코딩을 통해 3.0이라는 실수를 입력할 수 있다.


   2) a = tf.placeholder(tf.float32)

       - 다른 노드를 사용해 계산할 때, 미지수로 간주하는 역할을 할 수 있다.

       - print(sess.run(adder_node, feed_dict={a:[1,3], b:[2,4]}))

       : 다음과 같이 feed_dict 인수를 사용해 어떤 미지수를 대입할 것인가를 결정할 수 있다.

         [1,3]과 같이 배열의 형태로 대입할 수 있다.




* Tensor Ranks, Shapes, and Types


  1) Rank

      (1) rank = 0 : Scalar (magnitude)

      (2) rank = 1 : Vector (magnitude and direction)

      (3) rank = 2 : Matrix (table of numbers)

      (4) rank = 3 : 3-Tensor (cube of numbers)

            ...

      (n+1) rank = n : n-Tensor (idea)


  2) Shape

      - tensor의 각 element에 몇 개씩 들어가 있는가?


  3) Types

      - 대부분 tf.float32(- 32bits floating point) 를 사용

+ Recent posts