기계 학습에서 분류를 위한 Scikit-learn 시작하기

기계 학습에서 분류를 위한 Scikit-learn 시작하기

소스 노드 : 1780638
기계 학습에서 분류를 위한 Scikit-learn 시작하기
편집자별 이미지
 

Scikit-learn은 Python으로 구축된 가장 일반적으로 사용되는 기계 학습 라이브러리 중 하나입니다. 그 인기는 초보자 개발자에게 친숙한 쉽고 일관된 코드 구조 때문일 수 있습니다. 또한 라이브러리를 강력하고 프로덕션에 적합하게 만드는 타사 기능을 통합할 수 있는 유연성과 함께 높은 수준의 지원이 제공됩니다. 라이브러리에는 분류, 회귀 및 클러스터링을 위한 여러 기계 학습 모델이 포함되어 있습니다. 이 튜토리얼에서는 다양한 알고리즘을 통해 다중 클래스 분류 문제를 탐구합니다. 바로 들어가서 scikit-learn 모델을 구축해 봅시다.

pip install scikit-learn

우리는 scikit-learn의 datasets 모듈에서 사용할 수 있는 "Wine" 데이터셋을 사용할 것입니다. 이 데이터 세트는 총 178개의 샘플과 3개의 클래스로 구성되어 있습니다. 데이터 세트는 이미 전처리되어 기능 벡터로 변환되었으므로 모델을 교육하는 데 직접 사용할 수 있습니다.

from sklearn.datasets import load_wine X, y = load_wine(return_X_y=True)

데이터의 67%는 교육용으로, 나머지 33%는 테스트용으로 보관합니다.

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42
)

 

이제 복잡성이 다른 5가지 모델을 실험하고 데이터 세트에서 결과를 평가합니다.

model_lr = LogisticRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test) print("Accuracy Score: ", accuracy_score(y_pred_lr, y_test))
print(classification_report(y_pred_lr, y_test))

 

산출

Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
model_knn = KNeighborsClassifier(n_neighbors=1)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_knn, y_test))
print(classification_report(y_pred_knn, y_test))

 

산출 

Accuracy Score: 0.7796610169491526 precision recall f1-score support 0 0.90 0.78 0.84 23 1 0.75 0.82 0.78 22 2 0.67 0.71 0.69 14 accuracy 0.78 59 macro avg 0.77 0.77 0.77 59
weighted avg 0.79 0.78 0.78 59

 

매개변수 'n_neighbors=2'를 변경하면 정확도 값이 감소하는 것을 관찰할 수 있습니다. 따라서 데이터가 충분히 단순하고 고려할 단일 이웃으로 더 나은 학습을 달성한다는 것을 보여줍니다. 

산출 

Accuracy Score: 0.6949152542372882 precision recall f1-score support 0 0.90 0.72 0.80 25 1 0.75 0.69 0.72 26 2 0.33 0.62 0.43 8 accuracy 0.69 59 macro avg 0.66 0.68 0.65 59
weighted avg 0.76 0.69 0.72 59
from sklearn.naive_bayes import GaussianNB model_nb = GaussianNB()
model_nb.fit(X_train, y_train)
y_pred_nb = model_nb.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_nb, y_test))
print(classification_report(y_pred_nb, y_test))

 

산출

Accuracy Score: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 20 1 1.00 1.00 1.00 24 2 1.00 1.00 1.00 15 accuracy 1.00 59 macro avg 1.00 1.00 1.00 59
weighted avg 1.00 1.00 1.00 59
from sklearn.tree import DecisionTreeClassifier model_dtclassifier = DecisionTreeClassifier()
model_dtclassifier.fit(X_train, y_train)
y_pred_dtclassifier = model_dtclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_dtclassifier, y_test))
print(classification_report(y_pred_dtclassifier, y_test))

 

산출

Accuracy Score: 0.9661016949152542 precision recall f1-score support 0 0.95 0.95 0.95 20 1 1.00 0.96 0.98 25 2 0.93 1.00 0.97 14 accuracy 0.97 59 macro avg 0.96 0.97 0.97 59
weighted avg 0.97 0.97 0.97 59
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV def get_best_parameters(): params = { "n_estimators": [10, 50, 100], "max_features": ["auto", "sqrt", "log2"], "max_depth": [5, 10, 20, 50], "min_samples_split": [2, 4, 6], "min_samples_leaf": [2, 4, 6], "bootstrap": [True, False], } model_rfclassifier = RandomForestClassifier(random_state=42) rf_randomsearch = RandomizedSearchCV( estimator=model_rfclassifier, param_distributions=params, n_iter=5, cv=3, verbose=2, random_state=42, ) rf_randomsearch.fit(X_train, y_train) best_parameters = rf_randomsearch.best_params_ print("Best Parameters:", best_parameters) return best_parameters parameters_rfclassifier = get_best_parameters() model_rfclassifier = RandomForestClassifier( **parameters_rfclassifier, random_state=42
) model_rfclassifier.fit(X_train, y_train) y_pred_rfclassifier = model_rfclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_rfclassifier, y_test))
print(classification_report(y_pred_rfclassifier, y_test))

 

산출


Best Parameters: {'n_estimators': 100, 'min_samples_split': 6, 'min_samples_leaf': 4, 'max_features': 'log2', 'max_depth': 5, 'bootstrap': True}
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59

 

이 알고리즘에서는 최상의 정확도를 달성하기 위해 하이퍼파라미터 튜닝을 수행했습니다. 각 매개변수에 대해 선택할 여러 값으로 구성된 매개변수 그리드를 정의했습니다. 또한 Randomized Search CV 알고리즘을 사용하여 모델에 가장 적합한 매개변수 공간을 검색했습니다. 마지막으로 얻은 매개변수를 분류기에 공급하고 모델을 훈련합니다. 

모델 정확성 관측
로지스틱 회귀 98.30% 뛰어난 정확도를 달성합니다. 모델은 테스트 데이터 세트에서 잘 일반화할 수 있습니다.
K- 최근 접 이웃 77.96% 알고리즘이 데이터 표현을 잘 학습할 수 없습니다.
나이브 베이 즈 100% 모델이 덜 복잡하므로 절대 정확도를 얻기 위해 데이터를 과대적합합니다.
의사 결정 트리 분류기 96.61% 준수한 정확도를 달성합니다.
랜덤 포레스트 분류기 98.30% 앙상블 기반 접근 방식이므로 의사 결정 트리보다 성능이 좋습니다. 하이퍼파라미터 튜닝을 수행하면 로지스틱 회귀와 비슷한 정확도를 얻을 수 있습니다.

이 튜토리얼에서는 scikit-learn에서 기계 학습 모델을 구축하고 훈련하는 방법을 배웠습니다. 우리는 성능에 대한 기본 아이디어를 얻기 위해 몇 가지 알고리즘을 구현하고 평가했습니다. 기능 엔지니어링, 하이퍼파라미터 튜닝 또는 성능 향상을 위한 교육을 위한 고급 전략을 언제든지 채택할 수 있습니다. scikit-learn이 제공하는 기능에 대해 자세히 알아보려면 공식 문서를 참조하세요. scikit-learn을 사용한 기계 학습 소개, scikit-learn을 사용한 Python의 기계 학습.

 
 
예샤 샤스트리 Université de Montréal에서 기계 학습 석사 과정을 밟고 있는 열정적인 AI 개발자이자 작가입니다. Yesha는 사회에 도움이 되는 문제를 해결하고 자신의 학습 내용을 커뮤니티와 공유하기 위해 책임 있는 AI 기술을 탐구하는 데 관심이 있습니다.
 

타임 스탬프 :

더보기 너 겟츠