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

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

by java개발자 2017. 8. 30.

2장의 데이터셋 종류가 많다. 각 데이터에 따른 각 알고리즘은 어떻게 작동할 것인가?


공부 방향

일단 알고리즘 종류의 차이를 정확히 비교하고,

나중에 데이터 자체를 분석하는 방법(pandas...) 공부


알고리즘

 

forge

wave

cancer

boston

extended boston

blobs

ram_prices

two_moons

handcrafted

circles

iris

 

X

26x2

40x1

569x30

506x13

506x104

100x2

333x1

100x2

26x2

100x2

150x4

 

y

2

연속

2

연속

연속

3

1

2

2

2

3

 

 

 

 

 

 

 

 

 

 

 

 

ch1 (44p)
iris_dataset = sklearn.datasets.load_iris()
X = iris_dataset['data']
y = iris_dataset['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

kNN

KNeighborsClassifier

 

 

 

 

 

 

 

 

 

 

ch1 (47p)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
print(knn.score(X_train, y_train))
print(knn.score(X_test, y_test))
// 1.0
// 0.973


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


 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

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

 (DataFrame)

 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장 알고리즘 정리

 

 Class

 매개변수

 장점

 단점

 

 최근접이웃

 분류 KNeighborsClassifier

 회귀 KNeighborsRegressor

 거리재는방법, 이웃수k

 작은 데이터셋일 경우, 기본모델로서 설명하기 쉬움

 훈련세트가 크면 예측이 느려진다.

 수백개이상의 많은 특성을 가진 데이터셋은 잘 동작하지 않음.

 데이터 전처리 중요

 선형모델

 

 

 선형모델: 첫번째로 시도할 알고리즘

 대용량 데이터셋, 고차원 데이터 가능

 

 

  분류

 LogisticRegression

 LinearSVC

 C, 규제(L1, L2)

 

 로지스틱회귀는 이진분류만 지원(소프트맥스 함수 사용해서 다중분류 가능)

 기본 L2 규제

  회귀 LinearRegression    
 

 회귀
 Ridge

 Lasso

 alpha   릿지 회귀 선호. 단, 일부특성만 사용할 경우 라쏘가 좋을수도 있음.

 나이브베이즈

 MultinomialNB

 BernoulliNB

 GaussianNB

 alpha

 선형모델보다 빠름.

 대용량 데이터셋, 고차원 데이터 가능

 비교적 매개변수에 민감하지 않음

 분류만 가능

 선형 모델보다 덜 정확


 트리 

 max_depth, 
max_leaf_nodes, min_samples_leaf

 

 외삽: 훈련범위 밖의 데이터는 예측 불가

 과대적합경향이 있어서 일반화 성능이 안좋음

 

 결정트리

 분류 DecisionTreeClassifier

 회귀 DecisionTreeRegressor

 

 매우 빠름

 시각화하기 좋고, 설명하기 쉬움

 

 데이터 스케일 조정 필요 없음

 랜덤포레스트

 분류 RandomForestClassifier

 

 결정트리 하나보다 거의 항상 좋은 성능!!

 매우 안정적이고 강력함.


 고차원 희소 데이터에는 잘 안 맞음.

 데이터 스케일 조정 필요 없음

 그래디언트 부스팅 결정 트리

 분류 GradientBoostingClassifier

 

 랜덤포레스트보다 조금 더 성능이 좋음

 예측은 빠르고, 메모리를 조금 사용함

 랜덤포레스트보다 학습이 느림

 랜덤포레스트보다 매개변수 튜닝이 많이 필요함

 

 서포트벡터머신

 분류 SVC

 회귀 SVR

 

 비슷한 의미의 특성으로 이뤄진 중간 규모 데이터셋에 잘 맞음.

 매개변수에 민감

 데이터 스케일 조정 필요

 신경망

 분류 MLPClassifier

 

 특별히 대용량 데이터셋에서 매우 복잡한 모델을 만들 수 있음.

 매개변수 선택과 데이터스케일에 민감

 큰 모델은 학습이 오래 걸림.

 데이터 스케일 조정 필요