[機械学習]Python機械学習パーフェクトガイド(権哲民,Wekibooks):第2章ネットワークショップからの機械学習(2)
24804 ワード
🚢セキトロンでタイタニック号の生存者を予測する
✅0. ライブラリとモジュール全体のロード import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from sklearn import preprocessing
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split, cross_val_score, KFold, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
💾1.データのロード titanic_df = pd.read_csv(r'./kaggle/titanic/titanic_train.csv')
titanic_df.head(3)
🔍2.特徴確認と加工 # 데이터 칼럼 타입 확인
print(titanic_df.info())
# Null 처리 함수
def fillna(df):
df['Age'].fillna(df['Age'].mean(), inplace=True)
df['Cabin'].fillna('N', inplace=True)
df['Embarked'].fillna('N', inplace=True)
df['Fare'].fillna(0, inplace=True)
return df
# 머신러닝 알고리즘에 불필요한 속성 제거
def drop_features(df):
df.drop(['PassengerId', 'Name', 'Ticket'], axis=1, inplace=True)
return df
# 레이블 인코딩 수행
def format_features(df):
df['Cabin']=df['Cabin'].str[:1]
features = ['Cabin', 'Sex', 'Embarked']
for feature in features:
le = LabelEncoder()
le = le.fit(df[feature])
df[feature] = le.transform(df[feature])
return df
# 앞에서 설정한 데이터 전처리 함수 호출
def transform_features(df):
df = fillna(df)
df = drop_features(df)
df = format_features(df)
return df
📝3.ラーニングおよびテストデータセットの抽出 # 원본 데이터 재로딩. 피처 데이터 세트와 레이블 데이터 세트 추출
titanic_df = pd.read_csv(r'./kaggle/titanic/titanic_train.csv')
y_titanic_df = titanic_df['Survived']
x_titanic_df = titanic_df.drop('Survived', axis=1)
x_titanic_df = transform_features(x_titanic_df)
# train_test_split() API를 이용해 별도의 테스트 데이터셋 추출
x_train, x_test, y_train, y_test = train_test_split(x_titanic_df, y_titanic_df, test_size=0.2, random_state=11)
💡4.機械学習アルゴリズムによる生存者の予測
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from sklearn import preprocessing
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split, cross_val_score, KFold, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
titanic_df = pd.read_csv(r'./kaggle/titanic/titanic_train.csv')
titanic_df.head(3)
🔍2.特徴確認と加工 # 데이터 칼럼 타입 확인
print(titanic_df.info())
# Null 처리 함수
def fillna(df):
df['Age'].fillna(df['Age'].mean(), inplace=True)
df['Cabin'].fillna('N', inplace=True)
df['Embarked'].fillna('N', inplace=True)
df['Fare'].fillna(0, inplace=True)
return df
# 머신러닝 알고리즘에 불필요한 속성 제거
def drop_features(df):
df.drop(['PassengerId', 'Name', 'Ticket'], axis=1, inplace=True)
return df
# 레이블 인코딩 수행
def format_features(df):
df['Cabin']=df['Cabin'].str[:1]
features = ['Cabin', 'Sex', 'Embarked']
for feature in features:
le = LabelEncoder()
le = le.fit(df[feature])
df[feature] = le.transform(df[feature])
return df
# 앞에서 설정한 데이터 전처리 함수 호출
def transform_features(df):
df = fillna(df)
df = drop_features(df)
df = format_features(df)
return df
📝3.ラーニングおよびテストデータセットの抽出 # 원본 데이터 재로딩. 피처 데이터 세트와 레이블 데이터 세트 추출
titanic_df = pd.read_csv(r'./kaggle/titanic/titanic_train.csv')
y_titanic_df = titanic_df['Survived']
x_titanic_df = titanic_df.drop('Survived', axis=1)
x_titanic_df = transform_features(x_titanic_df)
# train_test_split() API를 이용해 별도의 테스트 데이터셋 추출
x_train, x_test, y_train, y_test = train_test_split(x_titanic_df, y_titanic_df, test_size=0.2, random_state=11)
💡4.機械学習アルゴリズムによる生存者の予測
# 데이터 칼럼 타입 확인
print(titanic_df.info())
# Null 처리 함수
def fillna(df):
df['Age'].fillna(df['Age'].mean(), inplace=True)
df['Cabin'].fillna('N', inplace=True)
df['Embarked'].fillna('N', inplace=True)
df['Fare'].fillna(0, inplace=True)
return df
# 머신러닝 알고리즘에 불필요한 속성 제거
def drop_features(df):
df.drop(['PassengerId', 'Name', 'Ticket'], axis=1, inplace=True)
return df
# 레이블 인코딩 수행
def format_features(df):
df['Cabin']=df['Cabin'].str[:1]
features = ['Cabin', 'Sex', 'Embarked']
for feature in features:
le = LabelEncoder()
le = le.fit(df[feature])
df[feature] = le.transform(df[feature])
return df
# 앞에서 설정한 데이터 전처리 함수 호출
def transform_features(df):
df = fillna(df)
df = drop_features(df)
df = format_features(df)
return df
# 원본 데이터 재로딩. 피처 데이터 세트와 레이블 데이터 세트 추출
titanic_df = pd.read_csv(r'./kaggle/titanic/titanic_train.csv')
y_titanic_df = titanic_df['Survived']
x_titanic_df = titanic_df.drop('Survived', axis=1)
x_titanic_df = transform_features(x_titanic_df)
# train_test_split() API를 이용해 별도의 테스트 데이터셋 추출
x_train, x_test, y_train, y_test = train_test_split(x_titanic_df, y_titanic_df, test_size=0.2, random_state=11)
💡4.機械学習アルゴリズムによる生存者の予測
DecisionTreeClassifier
クラス)、ランダムツリー(RandomForestClassifier
クラス)、論理回帰(LogisticRegrssion
クラス)、合計fit
(機械学習モデル学習)、predict
(予測)、accuracy_score()
API #결정트리, 랜덤포레스트, 로지스틱 회귀 위한 사이킷런 classifier 클래스 생성
dt_clf = DecisionTreeClassifier(random_state=11)
rf_clf = RandomForestClassifier(random_state=11)
lr_clf = LogisticRegression()
# 의사결정트리 학습, 예측, 평가
dt_clf.fit(x_train, y_train)
dt_pred = dt_clf.predict(x_test)
print('DecisionTreeClassifer 정확도 : {0:.4f}'.format(accuracy_score(y_test, dt_pred)))
#DecisionTreeClassifer 정확도 : 0.7877
#랜덤포레스트 학습, 예측, 평가
rf_clf.fit(x_train, y_train)
rf_pred = rf_clf.predict(x_test)
print('RandomForestClassifier 정확도 : {0:.4f}'.format(accuracy_score(y_test, dt_pred)))
#RandomForestClassifier 정확도 : 0.7877
# 로지스틱회귀 학습, 예측, 평가
lr_clf.fit(x_train, y_train)
lr_pred = lr_clf.predict(x_test)
print('LogisticRegression 정확도 : {0:.4f}'.format(accuracy_score(y_test, lr_pred)))
#LogisticRegression 정확도 : 0.8492
💯5.クロス検証による決定ツリーモデルの評価
def exec_kfold(clf, folds=5):
kfold = KFold(n_splits=folds) #폴드 세트를 5개인 KFold 객체 생성
scores = [] # 폴드 수만큼 예측 결과 저장을 위한 리스트 객체 생성
for iter_count, (train_index, test_index) in enumerate(kfold.split(x_titanic_df)):
x_train, x_test = x_titanic_df.values[train_index], x_titanic_df.values[test_index]
y_train, y_test = y_titanic_df.values[train_index], y_titanic_df.values[test_index]
clf.fit(x_train, y_train)
predictions = clf.predict(x_test)
accuracy = accuracy_score(y_test, predictions)
scores.append(accuracy)
print('교차 검증 {0} 정확도 : {1:.4f}'.format(iter_count, accuracy))
mean_score = np.mean(scores)
print('평균 정확도 : {0:.4f}'.format(mean_score))
exec_kfold(dt_clf, folds=5)
scores = cross_val_score(dt_clf, x_titanic_df, y_titanic_df, cv=5)
for iter_count, accuracy in enumerate(scores):
print('교차 검증 {0} 정확도 : {1:.4f}'.format(iter_count, accuracy))
print('평균 정확도 : {0:.4f}'.format(np.mean(scores)))
parameters = {'max_depth':[2, 3, 5, 10], 'min_samples_split':[2, 3, 5], 'min_samples_leaf':[1, 5, 8]}
grid_dclf = GridSearchCV(dt_clf, param_grid=parameters, scoring='accuracy', cv=5)
grid_dclf.fit(x_train, y_train)
print('GridSearchCV 최적 하이퍼 파라미터 : ', grid_dclf.best_params_)
print('GridSearchCV 최고 정확도 : {0:.4f}'.format(grid_dclf.best_score_))
best_dclf = grid_dclf.best_estimator_
dpredictions = best_dclf.predict(x_test)
accuracy = accuracy_score(y_test, dpredictions)
print('테스트 세트에서의 DecisionTreeClassifier 정확도 : {0:.4f}'.format(accuracy))
Reference
この問題について([機械学習]Python機械学習パーフェクトガイド(権哲民,Wekibooks):第2章ネットワークショップからの機械学習(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@717lumos/Machine-Learning-파이썬-머신러닝-완벽-가이드권철민-위키북스-2장-사이킷런으로-시작하는-머신러닝2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol