본문 바로가기

코딩으로 익히는 Python/머신러닝

[Python] 1. 머신러닝_분류

728x90
반응형
SMALL
# 경고 메시지가 안나오게.. import warnings warnings.filterwarnings('ignore') # 기본 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # KFold from sklearn.model_selection import KFold from sklearn.model_selection import StratifiedKFold # 교차 검증 함수 from sklearn.model_selection import cross_val_score from sklearn.model_selection import cross_validate # 데이터 전처리 from sklearn.preprocessing import LabelEncoder from sklearn.preprocessing import StandardScaler # 하이퍼 파라미터 튜닝 from sklearn.model_selection import GridSearchCV # 평가함수 from sklearn.metrics import accuracy_score # 머신러닝 알고리즘 - 분류 from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import GradientBoostingClassifier from xgboost import XGBClassifier # 머신러닝 알고리즘 - 회귀 from sklearn.neighbors import KNeighborsRegressor from sklearn.linear_model import LinearRegression from sklearn.linear_model import Ridge from sklearn.linear_model import Lasso from sklearn.linear_model import ElasticNet from sklearn.svm import SVR from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.ensemble import GradientBoostingRegressor from xgboost import XGBRegressor # 저장 import pickle # 그래프 설정 plt.rcParams['font.family'] = 'Malgun Gothic' # plt.rcParams['font.family'] = 'AppleGothic' plt.rcParams['font.size'] = 16 plt.rcParams['figure.figsize'] = 20, 10 plt.rcParams['axes.unicode_minus'] = False # xgboost 설치 -> pip install xgboost


머신러닝 프로젝트

  • 데이터 수집 : csv, 엑셀, spss 일 경우에는 다운로드. json, xml 이라면 bs4, feedparser, json 등등으로 수집한다. IoT 를 활용하는 경우, 설문조사 등등.
  • 데이터 준비 : DataFrame 생성(pandas)
  • 데이터 전처리(분석) : 이상치, 결측치, 극단치에 대한 처리(pandas)
  • 데이터 분석 : 데이터의 패턴을 읽어 사람이 분석(pandas, matplotlib, seaborn)
  • 데이터 전처리(머신러닝) : 문자열 -> 숫자, 표준화 작업 등등....
  • 학습 모델 선정 : 하이퍼 파라미터 튜닝, 교차검증 등등..
  • 전체 데이터를 학습
  • 파일로 저장
  • 예측결과 도출

데이터 준비

  • 파일 형태로 저장되어 있는 데이터를 읽어와 데이터 프레임을 생성한다.
  • 데이터 프레임 생성이 성공했다면 데이터에 대한 구조적인 문제는 없다.


데이터 불러오기 (pd.read_csv)
python 파일 경로에 만든 후 data폴더에 다음의 'breast_cancer.csv' 파일 넣어놓기

breast_cancer.csv
0.09MB

df1 = pd.read_csv('data/breast_cancer.csv') df1.head()

df1.head()
[OUT] : mean radius 0 mean texture 0 mean perimeter 0 mean area 0 mean smoothness 0 mean compactness 0 mean concavity 0 mean concave points 0 mean symmetry 0 mean fractal dimension 0 radius error 0 texture error 0 perimeter error 0 area error 0 smoothness error 0 compactness error 0 concavity error 0 concave points error 0 symmetry error 0 fractal dimension error 0 worst radius 0 worst texture 0 worst perimeter 0 worst area 0 worst smoothness 0 worst compactness 0 worst concavity 0 worst concave points 0 worst symmetry 0 worst fractal dimension 0 target 0 dtype: int64

데이터 전처리

  • 숫자 -> 문자열 : 성별과 같은 레이블형 데이터가 숫자로 되어 있을 경우 문자로 바꿔주는 작업
  • 결측치 처리 : 측정되지 않은 데이터(na로 표시된다). 제거나 대체
  • 이상치 처리 : 이상한 데이터, 제거나 대체
  • 극단치 처리 : 정상 범위안에 있지만 다른 데이터와 너무 동떨어져 있는 데이터, 확인후 처리
# 이상치 확인 - 범위형 (요약 통계정보를 통해 최대 최소 값을 확인한다) # df1[['mean radius', 'mean texture', 'mean perimeter']].describe() df1.drop('target', axis=1).describe()

# 이상치 확인 - 레이블형 데이터 df1['target'].value_counts()
[OUT] : benign 268 malignant 186 Name: target, dtype: int64

# 범위형 데이터들에 대해 극단치를 확인한다. df1.drop('target', axis=1).boxplot() plt.show()

머신러닝을 위한 데이터 전처리

  • 문자열 -> 숫자
  • 표준화 작업 : 모든 컬럼의 데이터에 대한 표준편차를 비슷한 수준으로 맞추는 작업

# 입력과 결과로 나눈다. x = df1.drop('target', axis=1) y = df1['target'] display(x) display(y)

# 문자열을 숫자로 변환 encoder1 = LabelEncoder() encoder1.fit(y) y = encoder1.transform(y) y
[OUT] : array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0])

# 표준화 scaler1 = StandardScaler() scaler1.fit(x) x = scaler1.transform(x) x
[OUT] : array([[ 1.0716471 , -2.11021126, 1.24691885, ..., 2.21627442, 2.57629265, 1.89296305], [ 1.80872514, -0.29975355, 1.665741 , ..., 1.02843583, -0.29491256, 0.27048275], [ 1.55731868, 0.55280299, 1.54548514, ..., 1.88116631, 1.04374227, 0.19229093], ..., [ 1.52874976, 1.47150615, 1.4501098 , ..., 0.43900458, -1.00379467, -1.25588676], [-0.63963097, 2.26281581, -0.66183197, ..., -0.68959168, -0.76491536, -0.11396037], [ 0.0831626 , -1.22825622, 0.04684827, ..., -0.15491471, -0.51828023, -0.32247189]])

학습 모델 선정

KNN

  • 최 근접 이웃
  • 학습 과정이 데이터를 저장하는 것으로 끝난다.
  • 주변의 데이터를 확인하여 결과를 예측한다.
  • 속도가 빠르지만 주변만 바라보기 때문에 다른 모델에 비해서 성능이 떨어질 수도 있다.
  • 이웃의 개수가 너무 많으면 편향의 오류가 발생할 가능성이 높다
  • 하이퍼 파라미터 튜닝 : 성능을 향상시키는 것도 있지만 편향의 오류를 예방하는 효과도 있다.
  • 성능은 어느정도 타협을 볼 수 있고 속도가 중요한 경우.

# KFold 생성 : 교차 검증을 위해 데이터 구성을 하는 작업 fold1 = StratifiedKFold(n_splits=10)

# 하이퍼 파라미터 튜닝 params = { 'n_neighbors' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] } model1 = KNeighborsClassifier() grid1 = GridSearchCV(model1, param_grid=params, scoring='accuracy', cv=fold1) grid1.fit(x, y) print(f'최적의 하이퍼 파라미터 : {grid1.best_params_}') print(f'최적의 모델 평균 성능 : {grid1.best_score_}')
[OUT] : 최적의 하이퍼 파라미터 : {'n_neighbors': 9} 최적의 모델 평균 성능 : 0.9670531400966184


선형 모델

  • 선형 회귀 기법을 이용해 데이터간의 경계선을 찾는 방식으로 학습한다.
  • LogisticRegrssion : 경계선과 가장 가까운 데이터와의 거리가 먼 선을 찾는다.
  • SVM : 경계선과 가장 가까운 데이터와의 거리가 가까운 선을 찾는다.
  • 적당한 속도와 적당한 성능을 보인다.
  • 하이퍼 파라미터 튜닝 : 규제 강도를 튜닝한다. 규제가 약해지면 편향의 오류가 발생하고 규제가 강해지면 과적합이 발생할 수 있다.

params = { # 값이 크면 규제가 약해지고, 값이 작으면 규제가 강해진다. 'C' : [0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 10000] } model2 = LogisticRegression() grid2 = GridSearchCV(model2, param_grid=params, scoring='accuracy', cv=fold1) grid2.fit(x, y) print(f'최적의 하이퍼 파라미터 : {grid2.best_params_}') print(f'최적의 모델 평균 성능 : {grid2.best_score_}')
[OUT] : 최적의 하이퍼 파라미터 : {'C': 0.1} 최적의 모델 평균 성능 : 0.9779227053140097

params = { # 값이 크면 규제가 약해지고, 값이 작으면 규제가 강해진다. 'C' : [0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 10000] } model3 = SVC() grid3 = GridSearchCV(model3, param_grid=params, scoring='accuracy', cv=fold1) grid3.fit(x, y) print(f'최적의 하이퍼 파라미터 : {grid3.best_params_}') print(f'최적의 모델 평균 성능 : {grid3.best_score_}')
[OUT] : 최적의 하이퍼 파라미터 : {'C': 1} 최적의 모델 평균 성능 : 0.9648792270531402


결정트리

  • 데이터를 보고 질문을 생성하여 학습하는 알고리즘
  • 학습 과정에서 질문을 생성하기 때문에 학습 시간이 오래걸린다.
  • 예측 과정에서 질문을 통과해야 하기 때문에 예측 시간이 오래걸린다.
  • 앞서 살펴본 모델에 비해 성능이 높게 나타날 가능성이 높다.
  • 단 결정트리를 학습 데이터에 최적화(과적합)되는 모델이므로 사용에 주의해야 한다.
  • 하이퍼 파라미터 튜닝 : 질문이 무한정 생성되어 학습과 예측이 오래걸리는 것을 예방한다.

params = { # 질문 깊이 'max_depth' : [None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] } model4 = DecisionTreeClassifier() grid4 = GridSearchCV(model4, param_grid=params, scoring='accuracy', cv=fold1) grid4.fit(x, y) print(f'최적의 하이퍼 파라미터 : {grid4.best_params_}') print(f'최적의 모델 평균 성능 : {grid4.best_score_}')
[OUT] : 최적의 하이퍼 파라미터 : {'max_depth': 4} 최적의 모델 평균 성능 : 0.9317874396135266


앙상블

  • 하나의 모델이 아닌 다수의 모델을 사용하여 학습하고 예측하는 알고리즘
  • 과적합된 알고리즘을 모아 각 알고리즘이 던지는 예측 결과들을 취합하여 최종 결과를 예측하는 알고리즘
  • 랜덤 포레스트 : 다수의 트리를 모아 학습하고 예측하는 알고리즘
  • 부스팅 : 랜덤 포레스트 기법과 비슷하다. 한번의 학습과 예측이 아닌 어긋나게 예측한 결과에 대해 보정작업을 해서 랜덤 포레스트보다 정확도가 높게 나타날 확률이 있는 알고리즘
  • 다른 모델들에 비해 성능이 높을 확률이 높지만 속도는 매우 오래 걸린다.
  • 하이퍼 파라미터 튜닝 : 성능 향상, 속도 조절

params = { # 트리의 개수 'n_estimators' : [10, 50, 100, 150, 200], # 질문 깊이 'max_depth' : [None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] } model5 = RandomForestClassifier() grid5 = GridSearchCV(model5, param_grid=params, scoring='accuracy', cv=fold1) grid5.fit(x, y) print(f'최적의 하이퍼 파라미터 : {grid5.best_params_}') print(f'최적의 모델 평균 성능 : {grid5.best_score_}')
[OUT] : 최적의 하이퍼 파라미터 : {'max_depth': 9, 'n_estimators': 100} 최적의 모델 평균 성능 : 0.962657004830918

params = { # 트리의 개수 'n_estimators' : [10, 50, 100, 150, 200], # 질문 깊이 'max_depth' : [None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] } model6 = GradientBoostingClassifier() grid6 = GridSearchCV(model6, param_grid=params, scoring='accuracy', cv=fold1) grid6.fit(x, y) print(f'최적의 하이퍼 파라미터 : {grid6.best_params_}') print(f'최적의 모델 평균 성능 : {grid6.best_score_}')
[OUT] : 최적의 하이퍼 파라미터 : {'max_depth': 1, 'n_estimators': 150} 최적의 모델 평균 성능 : 0.9626086956521739

params = { # 트리의 개수 'n_estimators' : [10, 50, 100, 150, 200], # 질문 깊이 'max_depth' : [None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] } model7 = XGBClassifier(silent=True, verbosity=0, tree_method='gpu_hist') grid7 = GridSearchCV(model7, param_grid=params, scoring='accuracy', cv=fold1) grid7.fit(x, y) print(f'최적의 하이퍼 파라미터 : {grid7.best_params_}') print(f'최적의 모델 평균 성능 : {grid7.best_score_}')
[OUT] : 최적의 하이퍼 파라미터 : {'max_depth': 1, 'n_estimators': 200} 최적의 모델 평균 성능 : 0.9626086956521739

# 각 모델의 최적의 하이퍼 파라미터가 설정된 모델을 추출한다. best1 = grid1.best_estimator_ best2 = grid2.best_estimator_ best3 = grid3.best_estimator_ best4 = grid4.best_estimator_ best5 = grid5.best_estimator_ best6 = grid6.best_estimator_ best7 = grid7.best_estimator_

print(best1) print(best2) print(best3) print(best4) print(best5) print(best6) print(best7)
[OUT] : KNeighborsClassifier(n_neighbors=9) LogisticRegression(C=0.1) SVC(C=1) DecisionTreeClassifier(max_depth=4) RandomForestClassifier(max_depth=9) GradientBoostingClassifier(max_depth=1, n_estimators=150) XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1, colsample_bynode=1, colsample_bytree=1, gamma=0, gpu_id=0, importance_type='gain', interaction_constraints='', learning_rate=0.300000012, max_delta_step=0, max_depth=1, min_child_weight=1, missing=nan, monotone_constraints='()', n_estimators=200, n_jobs=12, num_parallel_tree=1, random_state=0, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, silent=True, subsample=1, tree_method='gpu_hist', validate_parameters=1, verbosity=0)

# 교차 검증 r1 = cross_val_score(best1, x, y, scoring='accuracy', cv=fold1 ) r2 = cross_val_score(best2, x, y, scoring='accuracy', cv=fold1 ) r3 = cross_val_score(best3, x, y, scoring='accuracy', cv=fold1 ) r4 = cross_val_score(best4, x, y, scoring='accuracy', cv=fold1 ) r5 = cross_val_score(best5, x, y, scoring='accuracy', cv=fold1 ) r6 = cross_val_score(best6, x, y, scoring='accuracy', cv=fold1 ) r7 = cross_val_score(best7, x, y, scoring='accuracy', cv=fold1 ) print(r1.mean()) print(r2.mean()) print(r3.mean()) print(r4.mean()) print(r5.mean()) print(r6.mean()) print(r7.mean())
[OUT] : 0.9670531400966184 0.9779227053140097 0.9648792270531402 0.9251690821256039 0.9538647342995169 0.9626086956521739 0.9626086956521739

plt.plot(r1, label='KNN') plt.plot(r2, label='LogisticRegression') plt.plot(r3, label='SVC') plt.plot(r4, label='DecisionTree') plt.plot(r5, label='RandomForest') plt.plot(r6, label='GradianBoosting') plt.plot(r7, label='XGBoost') plt.legend() plt.ylim(0, 1.2) plt.show()

전체 데이터 학습

best2.fit(x, y)
[OUT] : LogisticRegression(C=0.1)

# 학습한 데이터를 통해 평가를 실시한다. pred1 = best2.predict(x) pred1
[OUT] : array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0])

result1 = accuracy_score(y, pred1) result1
[OUT] : 0.9845814977973568

학습이 완료된 모델을 저장

with open('model1.dat', 'wb') as fp : pickle.dump(encoder1, fp) pickle.dump(scaler1, fp) pickle.dump(best2, fp) print('저장완료')
[OUT] : 저장완료

예측 결과 추출

데이터 불러오기 (pd.read_csv)
python 파일 경로에 만든 후 data폴더에 다음의 'breast_cancer_new.csv' 파일 넣어놓기

breast_cancer_new.csv
0.02MB

df2 = pd.read_csv('data/breast_cancer_new.csv') df2.head()

# 알고리즘 복원 with open('model1.dat', 'rb') as fp : new_encoder1 = pickle.load(fp) new_scaler1 = pickle.load(fp) new_model1 = pickle.load(fp) print(new_encoder1) print(new_scaler1) print(new_model1)
[OUT] : LabelEncoder() StandardScaler() LogisticRegression(C=0.1)

y2 = new_scaler1.transform(df2) y2
[OUT] : array([[-0.46250369, -0.45164581, -0.50218195, ..., -0.28043066, 0.5116929 , -0.5831113 ], [-0.24537993, 2.87283471, -0.26498762, ..., -0.59279929, -1.15425761, -0.39577673], [-0.74533596, 2.52250257, -0.7406203 , ..., -0.7316298 , -0.08705654, -0.64284116], ..., [ 0.67453917, 2.22606768, 0.64563954, ..., 0.3671957 , -1.12013199, -0.31704191], [ 1.81729582, 2.53230207, 1.96430728, ..., 2.21029035, 1.77899418, 2.16989242], [-1.85095302, 1.3588119 , -1.85817047, ..., -1.75415837, -0.10722167, -0.74112394]])

pred2 = new_model1.predict(y2) pred2
[OUT] : array([0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0])

a1 = new_model1.predict_proba(y2) proba_df = pd.DataFrame(a1, columns=['0', '1']) proba_df['target'] = pred2 proba_df

# 0부터 시작해서 전체 데이터의 개수가 들어있는 리스트를 생성한다. a100 = list(range(len(proba_df['0']))) plt.scatter(a100, proba_df['0'], label='0') plt.scatter(a100, proba_df['1'], label='1') plt.legend() plt.show()

# 결과데이터 복원 result100 = new_encoder1.inverse_transform(pred2) result100
[OUT] : array(['benign', 'malignant', 'benign', 'benign', 'benign', 'benign', 'malignant', 'malignant', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'malignant', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'malignant', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'malignant', 'benign', 'malignant', 'benign', 'benign', 'malignant', 'benign', 'benign', 'benign', 'benign', 'benign', 'malignant', 'malignant', 'benign', 'malignant', 'benign', 'malignant', 'benign', 'benign', 'benign', 'benign', 'benign', 'malignant', 'benign', 'benign', 'malignant', 'benign', 'benign', 'benign', 'malignant', 'malignant', 'benign', 'benign', 'benign', 'malignant', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'malignant', 'benign', 'malignant', 'malignant', 'benign', 'benign', 'benign', 'benign', 'malignant', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'benign', 'malignant', 'malignant', 'malignant', 'malignant', 'malignant', 'malignant', 'benign'], dtype=object)

# 결과 저장 df2['target'] = result100 df2.head()

# 저장한다. df2.to_csv('data/breast_cancer_result.csv')

728x90
반응형
LIST

'코딩으로 익히는 Python > 머신러닝' 카테고리의 다른 글

[Python] 2. 머신러닝_회귀  (0) 2021.02.03