본문 바로가기
python 및 머신러닝/파이썬 라이브러리를 활용한 머신러닝

파이썬 라이브러리를 활용한 머신러닝 2장

by java개발자 2017. 8. 9.

다양한 데이터와 다양한 알고리즘들이 비교, 분석되어서 책의 내용은 참 좋지만

정리가 안되는게 흠이다.

나중에 찾아보기 쉽게 내 것으로 만들자.


2장 정리


코드확인 : https://nbviewer.jupyter.org/github/rickiepark/introduction_to_ml_with_python/blob/master/02-supervised-learning.ipynb


샘플 데이터(데이터 개수, 특징 개수, 클래스 개수)

 page

 설명

 변수명

 X 데이터 개수

 X 특징 개수

 y 클래스 종류

 source code

 58 분류에 사용할 인위 데이터

 forge

 26

 2

 2 (0, 1)

 X, y = mglearn.datasets.make_forge()
 59

 회귀에 사용할 인위 데이터

 wave

 40 (데이터 개수 조절 가능)

 1

 연속성데이터

 X, y = mglearn.datasets.make_wave(n_samples=40)
 60 위스콘신 유방암 데이터

 cancer

 569

 30

 2 (양성, 악성)

 cancer = sklearn.datasets.load_breast_cancer()

 62

 보스턴 주택가격 데이터(회귀용)

 boston

 506

 13

 연속성데이터

 boston = sklearn.datasets.load_boston()
 62 피처 확장

 extended boston

 506

 104

 연속성데이터

 X, y = mglearn.datasets.load_extended_boston()
 94 

 blobs

 100

 2

 3

 X, y = sklearn.datasets.make_blobs(random_state=42)
 112

 컴퓨터 메모리 가격 동향 데이터 (로그스케일 필요)

 ram_prices

 333

 1 (date)

 1 (price)

 ram_prices = pd.read_csv(os.path.join(mglearn.datasets.DATA_PATH, "ram_price.csv"))
 117 

 two_moons

 100

 2

 2 (0, 1)

 X, y = sklearn.datasets.make_moons(n_samples=100, noise=0.25, random_state=3)
 131 

 handcrafted

 26

 2

 2 (0, 1)

 X, y = mglearn.tools.make_handcrafted_dataset()
 153 

 circles

 100 2 2 (0, 1) X, y = sklearn..datasets.make_circles(noise=0.25, factor=0.5, random_state=1)
 160 numpy(150x4) iris 150 4 3 (0, 1, 2)

 iris = sklearn.datasets.load_iris()



2.3.2 kNN (63p)

 page

 

 데이터

 알고리즘

 파라메터

 결과

 비고

 65

 k최근접 이웃 분류

 force 

 KNeighborsClassifier

 k=3

 정확도 : 0.86

 
 66 

 force 

 KNeighborsClassifier

 k=1, 3, 9

 Plot Image * 3

 
 67


 cancer

 KNeighborsClassifier

 k: 1~10

 Line Graph

 과대적합, 과소적합

 69

 k최근접 이웃 회귀

 wave (40개 데이터)

 KNeighborsRegressor

 k=3

 R^2 : 0.83

 
 72 

 wave (40개 데이터)

 KNeighborsRegressor

 k: 1, 3, 9

 Graph * 3

 이웃을 많이 사용하면 안정된 모델이 된다.

  

 

 

 

 

 


2.3.3 선형모델 (73p)

 page

 

 데이터

 알고리즘

 파라메터

 결과

 비고

 76

 선형회귀(최소제곱법)

 wave (60개 데이터)

 LinearRegression

 

 train 정확도: 0.67

 test 정확도: 0.66

 과소적합(1차원 데이터라서...)

 77

 

 extended boston

 LinearRegression

 

 train 정확도: 0.95

 test 정확도: 0.61

 과대적합 

  -> 복잡도를 낮출 필요있음(->릿지)

 78

 릿지회귀

 extended boston

 Ridge

 기본 alpha=1.0

 train 정확도: 0.89

 test 정확도: 0.75

 -> 모델의 복잡도가 낮아져서 일반화 됨.

 79

 

 extended boston

 Ridge

 alpha=10

 train 정확도: 0.79

 test 정확도: 0.64

 계수를 0에 더 가깝게 만듬

 일반화에 도움을 줌.

 80

 

 

 

 alpha=0.1

 train 정확도: 0.93

 test 정확도: 0.77

 작은 alpha값은 계수에 대한 제약이 풀리면서 LinearRegression 과 비슷한 결과가 나온다.

 83

 라쏘

 extended boston

 Lasso

 기본 alpha=1.0

 train 정확도: 0.29

 test 정확도: 0.21

 사용한 특성의 수: 4

 105개의 특성중 4개만 사용한 경우이므로 과소적합

 83

 

 extended boston

 Lasso

 alpha=0.01

 train 정확도: 0.90

 test 정확도: 0.77

 사용한 특성의 수: 33

 Ridge보다 조금 나음.

 84

 

 extended boston

 Lasso

 alpha=0.0001

 train 정확도: 0.95

 test 정확도: 0.64

 사용한 특성의 수: 94

 alpha값을 너무 낮추면 규제의 효과가 없어져 과대적합이 되므로 LinearRegression의 결과와 비슷해진다.

 87

 분류용 선형 모델

 forge

 LinearSVC

 

 결과서로비슷

 

 87  forge LogisticRegression  결과서로비슷 
 89  forge LinearSVC C= 0.01, 10, 1000 Plot Graph * 3 C의 값이 높아지면 규제가 감소합니다. -> 과대적합
 89  cancer

 LogisticRegression 

 (기본L2)

 기본값C=1

 train 정확도: 0.953

 test 정확도: 0.958

 훌륭한 성능이지만, 과소적합

-> 모델의 제약을 풀기 위해 C증가

(* train보다 test가 높은경우는 과소적합)

 90   LogisticRegression 

 (기본L2)

 C=100

 train 정확도: 0.972

 test 정확도: 0.965

 좋음.

 90   LogisticRegression 

 (기본L2)

 C=0.01

 train 정확도: 0.934

 test 정확도: 0.930

 C를 줄여서 더... 과소적합 되었다.

 92  cancer LogisticRegression 

 penalty= L1

 C= 0.001

 train 정확도: 0.91

 test 정확도: 0.92

 
 92  cancer LogisticRegression 

 penalty= L1

 C= 1

 train 정확도: 0.96

 test 정확도: 0.96

 
 92  cancer LogisticRegression 

 penalty= L1

 C= 100

 train 정확도: 0.99

 test 정확도: 0.98

 
 95 다중 클래스 분류용 선형 모델 blobs LinearSVC

 C

  
   

 LogisticRegression

 C  


선형회귀(최소제곱법)

평균제곱오차 MSE= sum((y' - y)^2) / N

릿지

L2 규제 추가 : 계수를 0에 가깝게 만들자

MSE= sum((y' - y)^2) / N + alpha*sum(w^2)

라쏘

L1 규제 추가 : 필요없는 계수를 0으로 만들자

MSE= sum((y' - y)^2) / N + alpha*sum(abs(w))

ElasticNet

L1, L2 규제 추가


*규제: 과대적합이 되지 않도록 모델을 강제로 제한한다는 의미



2.3.4 나이브 베이즈 분류기 (99p)

GaussianNB: 연속적인 데이터

BernoulliNB: 이진 데이터(0과 1)

MultinomialNB: 카운트 데이터(문장에 나타난 단어의 횟수)


BernoulliNB, MultinomialNB: 대부분 텍스트 분류시 사용


차이: 계산하는 통계 데이터의 종류가 조금 다르다.

GaussianNB: 클래스별로 각 특성의 표준편차와 평균을 계산

MultinomialNB: 클래스별로 특성의 평균을 계산


2.3.5 결정 트리(101p)

 page 

 데이터

 알고리즘

 파라메터

 결과

 비고
 106 결정 트리의 복잡도 제어하기 cancer DecisionTreeClassifier random_state=0

 train 정확도: 1.000

 test 정확도: 0.937

 과대적합됨.
 89p의 선형모델보다 test 정확도다 낮다.

 107 

 cancer

 DecisionTreeClassifier

 random_state=0

 max_depth=4

 train 정확도: 0.988

 test 정확도: 0.951

 과대적합이 줄어들었다.

 113  ram_prices DecisionTreeRegressor  

 train 데이터의 범위 밖의 test 데이터는 예측하지 못한다.

 113  ram_prices

 LinearRegression

   
       


2.3.6 결정 트리의 앙상블(115p)

 page 

 데이터

 알고리즘

 파라메터

 결과

 비고
 118 랜덤 포레스트 two_moons

 RandomForestClassifier

 n_estimators=5

 random_state=2

 

 트리5개

 119 

 cancer

 RandomForestClassifier n_estimators=100
 random_state=0

 train 정확도: 1.000

 test 정확도: 0.972

 트리100개

 선형모델보다 정확도가 높다.

 123 그래디언트 부스팅 회귀 트리 cancer

 GradientBoostingClassifier

 기본 max_depth=3

 기본 트리100개

 기본 learning_rate=0.1

 random_state=0

 train 정확도: 1.000

 test 정확도: 0.958

 과대적합됨.

 123  cancer GradientBoostingClassifier

 max_depth=1

 기본 트리100개

 기본 learning_rate=0.1

 random_state=0

 train 정확도: 1.000

 test 정확도: 0.972

 
 123  cancer GradientBoostingClassifier 기본 max_depth=3

 기본 트리100개

 learning_rate=0.01

 random_state=0

 train 정확도: 0.988

 test 정확도: 0.965

 


2.3.7 커널 서포트 벡터 머신(125p)

 page 

 데이터

 알고리즘

 파라메터

 결과

 비고
 127

 선형 모델과 비선형 특성

 blobs LinearSVC   
 128  blobs LinearSVC  

 특성1개를 추가

 131

 SVM 이해하기

 handcrafted

 SVC

 kernel='rbf'
 C=10
 gamma=0.1

  
 133  handcrafted mglearn.plots.plot_svm

 C: 0.1, 1, 1000

 gamma: 0.1, 1, 10

 3x3 graph 

 134

  cancer

 SVC

 기본값 C=1

 기본값 gamma = 1/N

 train 정확도: 1.00

 test 정확도: 0.63

 과대적합

 136  cancer 정규화 SVC 기본값 C=1

 기본값 gamma = 1/N

 train 정확도: 0.948

 test 정확도: 0.951

 과소적합
 137  cancer 정규화 SVC C=1000

 기본값 gamma = 1/N

 train 정확도: 0.988

 test 정확도: 0.972

 


2.3.8 신경망(138p)

 page 

 데이터

 알고리즘

 파라메터

 결과

 비고
 142

 신경망 튜닝

 two_moons

 MLPClassifier

 solver='lbfgs'

 random_state=0

 graph

 
 143  two_moons MLPClassifier solver='lbfgs'

 random_state=0

 hidden_layer_sizes=[10]

 graph

 은닉 유닛 개수 10개

 144  two_moons MLPClassifier solver='lbfgs'

 random_state=0

 hidden_layer_sizes=[10, 10]

 graph

 은닉층 2개, 유닛은 각 10개

 144  two_moons MLPClassifier solver='lbfgs'

 random_state=0

 hidden_layer_sizes=[10, 10]

 activation='tanh'

 graph

 활성화함수(비선형함수) : 하이퍼볼릭 탄젠트

 , 기본은 렐루(relu)

 145  two_moons MLPClassifier

 alpha: 0.001, 0.01, 0.1, 1

 hidden_layer_sizes:

[10, 10], [100, 100] 

 2x4 graph 
 146  two_moons MLPClassifier

 random_state: 0 ~ 7

 2x4 graph 
 147 

 cancer

 MLPClassifier random_state=42 train 정확도: 0.91

 test 정확도: 0.88

 다른모델보다 높지는 않다.

 148  cancer 정규화 MLPClassifier random_state=0

 train 정확도: 0.991

 test 정확도: 0.965

 반복횟수 경고 발생

 149  cancer 정규화 MLPClassifier

 random_state=0

 max_iter=1000

 train 정확도: 0.993

 test 정확도: 0.972

 좋아짐..
모델의 복잡도는 낮춰보자->
 149  cancer 정규화 MLPClassifier random_state=0

 max_iter=1000

 alpha=1

 train 정확도: 0.993

 test 정확도: 0.972

 모델의 복잡도가 낮아졌어도 정확도는 그대로...GOOD

       


2.4 분류 예측의 불확실성 추정(153p)

 page 

 데이터

 알고리즘

 파라메터

 결과

 비고
 153

 

 circles

 GradientBoostingClassifier

 random_state=0

  
 160

 다중 분류에서의 불확실성

 iris GradientBoostingClassifier

 random_state=0

 learning_rate=0.01