다양한 데이터와 다양한 알고리즘들이 비교, 분석되어서 책의 내용은 참 좋지만
정리가 안되는게 흠이다.
나중에 찾아보기 쉽게 내 것으로 만들자.
2장 정리
샘플 데이터(데이터 개수, 특징 개수, 클래스 개수)
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() |
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 | 과대적합됨. |
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' | ||
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 | ||
'python 및 머신러닝 > 파이썬 라이브러리를 활용한 머신러닝' 카테고리의 다른 글
scikit-learn 책 정리 (0) | 2017.09.18 |
---|---|
파이썬 라이브러리를 활용한 머신러닝 2장~6장 정리 (1) | 2017.08.30 |
파이썬 라이브러리를 활용한 머신러닝 5장 (0) | 2017.08.28 |
파이썬 라이브러리를 활용한 머신러닝 4장 (0) | 2017.08.25 |
파이썬 라이브러리를 활용한 머신러닝 3장 (0) | 2017.08.18 |