Coursera - Machine Learning week.4

이미지
Non-Linear Hypotheses 다음과 같은 트레이닝 셋이 있을때, 두 집단을  classification  하는  hypothesis  를 찾는다고 하자.   ( http://www.holehouse.org ) 많은 변수   x1^2, x1x2, x2^2 등을 넣는다고 하자 . 트레이닝 셋에 적합한 가설을 찾을수는 있겠지만 단점이 있다. 1. 과적합 이 발생할 수 있다. 2. 변수가  n  이라 할때, 모든  quadratic feature  를 도입하면  feature  수가 O(n^2)  ( n^2/2 )만큼 늘어난다. (아래 그림 참조) 계산 비용이 엄청나게 비싸진다.   ( http://blog.csdn.net/feliciafay ) 그리고 변수를 줄이기 위해  x1^2, x2^2, x3^2 ...  등 2차 변수  만을 도입하고 나머지  parameter  를 버리면,  hypothesis  가  underfit  할 수 있다. 만약 변수를  cubic  까지 도입하면  feature  수가  O(n^3)  으로 늘어나 계산시간은 어마어마하게 걸린다. 따라서 차수를 늘려 문제를 해결하려는 방법은  n  이 클때 좋은 방법이 아니다. 게다가 일반적으로 대부분의 문제들은  n  이 큰편이다. 자동차 이미지 인식 문제를 고려해 보자. 이미지는 픽셀이므로, 50 * 50 픽셀로 구성된 경우  n = 2500  이다.                      ( http://b...

Python For Data Analysis ch.02

Pandas 라이브러리에서 모르는 명령어 pd.read_table() or pd.read_csv() 테이블과 csv를 불러올 때 쓰이는 명령어로, pd.read_table('ml/1m/user.dat',sep='::',header=None,names=unames)를 예로 들 수 있다. pd.read_table()명령어 안에  sep는 기본적으로 연이은 값들은 스페이스로 구분되는데 sep를 사용함으로서 다른 구분기호를 사용할 수 있다. names로 열의 이름을 설정할 수 있다. pd.merge() 테이블을 합칠 때 쓰이는 명령어로, data = pd.merge(ratings,users)를 예로 들 수 있다. .pivot_table() 피벗은 단어의 의미 그대로 회전중심축을 의미하는데, 원본 데이터를 사용자가 정의한 축을 중심으로 다양하게 분석(회전)해볼 수 있다는 의미이다. data.pivot_table('rating', rows = 'title', cols='gender', aggfunc='mean')를 보면  data의 데이터 프레임에서 제목이라는 행과 성별이라는 열을 만들어 평균값을 계산해 만든 테이블이다. data.groupby('title').size() 데이터를 영화 title로 그룹화하고 size함수를 이용해 제목별 평점 정보 건수를 얻어낸다. .ix[] indexing으로서 데이터의 부분부분을 볼 수 있게 하는 명령어이다. 예를 들어, data.ix[:7,:2]이면 데이터의 0부터 7행과 0부터 2열까지 데이터를 부분적으로 보여준다. 또한 active_titles = ratings_by_title.index[ratings_by_title >= 250]일 때, mean_ratings.ix[active_titles]가 쓰이면 rating...

Machine Learning in Action ch.02 파이썬 코드 분석 (보류)

from numpy import * import operator from os import listdir def classify0(inX, dataSet, labels, k):     dataSetSize = dataSet . shape [0]     diffMat = tile (inX, (dataSetSize,1)) - dataSet     sqDiffMat = diffMat**2     sqDistances = sqDiffMat. sum ( axis=1 )     distances = sqDistances**0.5     sortedDistIndicies = distances. argsort ()       classCount={}             for i in range(k):         voteIlabel = labels[sortedDistIndicies[i]]         classCount[voteIlabel] = classCount. get (voteIlabel,0) + 1     sortedClassCount = sorted (classCount. iteritems (), key=operator. itemgetter (1), reverse=True)     return sortedClassCount[0][0] def createDataSet():     group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])     labels = ['A','A','B','B']     return group, labels def f...

Coursera - Machine Learning week.3

이미지
Classification 회귀는 연속된 값을 갖지만, 분류는 별개의 값을 갖는다. 예를 들면, 1 과 0으로 표현할 수 있는 값들이다. ( http://stats.stackexchange.com ) 위와 같은 경우,  Regression  으로 문제를 풀면 당장은 맞아 보이나, 종양이 이상한 위치에 생겼을 경우 아래와 같이 직선이 크게 변한다. ( http://stats.stackexchange.com ) 따라서 이렇게  discrete value  에 대해서는  Regression  보다는  Threshold  에 기반을 두어,  h(x)  가 일정 값 이상이면  y=1  로 예측하는 편이 더 정확도가 높아진다.  이런 이유 때문에  Classification  문제에  Regression  을 잘 사용하지 않는다. 그러나  y 의 범위가  0 <= h(x) <= 1  을 가지는  Logistic Regression  도 있다. 이건 Classification  에 사용되기도 한다. Logistic Regression 이전에 언급했듯이  classification  에선 예측된 값, 즉  h(x)  값이 0 과 1사이에 있길 바란다. 이를 위해  logistic function , 혹은  sigmoid function(곡선 함수)  이라 불리는 아래 식을 hypothesis   h(x)  에 적용하면 아래와 같은 그림이 나온다. ( http://www.saedsayad.com ) 이 때  sigmoid function  이 적용된  h(x)  는 최대값이 1이므로, 이건 입력값...