Open hdonghun opened 2 years ago
원본 DataFrame은 유지하고 드롭된 DataFrame을 새롭게 객체 변수로 받고 싶다면 inplace = False로 설정(디폴트 값이 False임).
titanic_df = titanic_df.drop('Age_0', axis=1, inplace=False)
DataFrame 및 Series에 reset_index() 메서드를 수행하면 새롭게 인덱스를 연속 숫자 형으로 할당하며 기존 인덱스는 'index'라는 새로운 컬럼 명으로 추가합니다.
loc[] : 명칭 기반 인덱싱 iloc[] : 위치 기반 인덱싱 불린 인덱싱(Boolean indexing) : 위치기반, 명칭기반 인덱싱 모두 사용할 필요없이 조건식을 []안에 기입하여 간편하게 필터링을 수행. ex) titanic_boolean = titanic_df[titanic_df['Age'] > 60] titanic_boolean ex) titanic_df[titanic_df['Age']>60][['Name','Age']].head(3)
encoding 하는 법 예시 : from sklearn import preprocessing
def encode_features(dataDF): features = ['Cabin', 'Sex', 'Embarked'] for feature in features: le = preprocessing.LabelEncoder() le = le.fit(dataDF[feature]) dataDF[feature] = le.transform(dataDF[feature])
return dataDF
titanic_df = encode_features(titanic_df) titanic_df.head()
예시 :
from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score
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('DecisionTreeClassifier 정확도: {0:.4f}'.format(accuracy_score(y_test, dt_pred)))
rf_clf.fit(X_train , y_train) rf_pred = rf_clf.predict(X_test) print('RandomForestClassifier 정확도:{0:.4f}'.format(accuracy_score(y_test, rf_pred)))
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)))
DecisionTreeClassifier 정확도: 0.7877 RandomForestClassifier 정확도:0.8547 LogisticRegression 정확도: 0.8492
from sklearn.model_selection import KFold
def exec_kfold(clf, folds=5):
kfold = KFold(n_splits=folds)
scores = []
# KFold 교차 검증 수행.
for iter_count , (train_index, test_index) in enumerate(kfold.split(X_titanic_df)):
# X_titanic_df 데이터에서 교차 검증별로 학습과 검증 데이터를 가리키는 index 생성
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]
# Classifier 학습, 예측, 정확도 계산
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))
# 5개 fold에서의 평균 정확도 계산.
mean_score = np.mean(scores)
print("평균 정확도: {0:.4f}".format(mean_score))
교차 검증 0 정확도: 0.7542 교차 검증 1 정확도: 0.7809 교차 검증 2 정확도: 0.7865 교차 검증 3 정확도: 0.7697 교차 검증 4 정확도: 0.8202 평균 정확도: 0.7823
from sklearn.model_selection import cross_val_score
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))
교차 검증 0 정확도: 0.7430 교차 검증 1 정확도: 0.7753 교차 검증 2 정확도: 0.7921 교차 검증 3 정확도: 0.7865 교차 검증 4 정확도: 0.8427 평균 정확도: 0.7879
from sklearn.model_selection import GridSearchCV
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.bestparams) print('GridSearchCV 최고 정확도: {0:.4f}'.format(grid_dclf.bestscore)) best_dclf = grid_dclf.bestestimator
dpredictions = best_dclf.predict(X_test) accuracy = accuracy_score(y_test , dpredictions) print('테스트 세트에서의 DecisionTreeClassifier 정확도 : {0:.4f}'.format(accuracy))
GridSearchCV 최적 하이퍼 파라미터 : {'max_depth': 3, 'min_samples_leaf': 5, 'min_samples_split': 2} GridSearchCV 최고 정확도: 0.7992 테스트 세트에서의 DecisionTreeClassifier 정확도 : 0.8715
사이킷런 불러오기 : import sklearn 데이터 불러오기 : from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split import pandas as pd 붓꽃 데이터 세트를 로딩합니다. iris = load_iris()
data와 target값을 iris_data, iris_target변수에 넣어주기 : iris_data = iris.data , iris_label = iris.target
label 변수값에 target값을 넣어주어 데이터 프레임을 만들 떄 이용하기, 새로운 컬럼인 label : iris_df['label'] = iris.target
데이터 프레임으로 만들어주기 : iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
학습/테스트 데이터 셋 분리 – train_test_split() : X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, test_size=0.2, random_state=11)
DecisionTreeClassifier 객체 생성해주기 : dt_clf = DecisionTreeClassifier(random_state=11)
학습 수행 : dt_clf.fit(X_train, y_train)
테스트 데이터 세트로 예측 수행 : pred = dt_clf.predict(X_test)
예측 정확도 평가 하기 : from sklearn.metrics import accuracy_score
print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))
여러가지 방법들 K 폴드 Stratified K 폴드 cross_val_score( ) GridSearchCV
encoding 과 one-Hot encoding 객체를 컴퓨터 값인 0,1로 만들어 줄때 사용!
피처 스케일링과 정규화 StandardScaler MinMaxScaler