[기계 학습 수기] 랜 덤 숲 과 디지털 인식

kaggle 디지털 인식 문제
소개 및 데이터 주소:https://www.kaggle.com/c/digit-recognizer
해법: python. sklearn 의 랜 덤 숲 방법
... 뿐만 아니 라
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 25 20:39:46 2015

@author: Ning LI
"""

import numpy as np;
import pandas as pd;
import sklearn as sk;
from sklearn.ensemble import RandomForestClassifier  as rf_clf
from sklearn import metrics

#    
df_train=pd.read_csv('train.csv')
df_test=pd.read_csv('test.csv')

X_train=df_train.iloc[:,1:]
y_train=df_train.iloc[:,0]

X_test=df_test.iloc[:]


#            
clf_initial=rf_clf(n_estimators=33)

#  KFold      ,    X_train     5 ,  4          ,          。
clf_validated=KFold_cv(X_train.values, y_train.values, clf_initial)


#       ,       ,     X_test      
y_pred=clf_validated.predict(X_test)

#      ,           ImageId Label  ,   csv  
ImageId=[i+1 for i in range(y_pred.shape[0])]
pred_packdata=np.vstack((ImageId,y_pred)).transpose()
df_pred=pd.DataFrame(pred_packdata, columns=['ImageId','Label'])
df_pred.to_csv('pred.csv')





#      

from scipy.stats import sem
import sklearn.cross_validation as cross_valid


def KFold_cv(X_train,y_train, clf):
    # leave one out: train 4: test 1
    # LeaveOneOut
    num=X_train[:].shape[0]
    kf=cross_valid.KFold(num,5)
    for train_index, test_index in kf:
        # to train 
        
        X_train_cv = X_train[train_index]
        print ("out of  train_index{0.3f}"),format(train_index)
        y_train_cv = y_train[train_index]
        # to validate
        X_test_cv  = X_train[test_index]
        y_test_cv  = y_train[test_index]
        
        clf=clf.fit(X_train_cv,y_train_cv)
        y_test_pred=clf.predict(X_test_cv)
        accuracy=metrics.accuracy_score(y_test_cv,y_test_pred)
        print ("Mean score: {0:.3f} (+/-{1:.3f})").format(np.mean(accuracy),sem(accuracy))
    return clf

교차 검증 시 정 답 률 은 95.6 - 95.8 로 의합 문제 가 없 었 다.
테스트 집의 정 답 률 은 95.614 이다.두 개의 차 이 는 매우 작다.
특히 랜 덤 숲 은 적합 하지 않 기 때문에 걱정 할 필요 가 없다 는 자료 (참고 자료 참조) 를 봤 다.
두 개의 랜 덤 성 때문에
하 나 는 모든 나무의 훈련 샘플 로 부츠 를 뽑 는 법 boottstrap 으로 나 온 것 이기 때문에 서로 다른 나무 간 의 훈련 샘플 의 차이 가 비교적 크기 때문에 훈련 샘플 에 있어 서로 다른 나무의 예측 방향 이 다 르 기 때문에 전체 삼림 이 훈련 샘플 에 대한 항 용 력 이 매우 강하 다.
또 하 나 는 모든 나무 가 훈련 하 는 과정 에서 훈련 에 사용 되 는 특징 도 무 작위 로 선택 되 어 모든 나무 가 모든 특징 에 대한 예측 능력 이 고 르 게 된다 는 것 이다.
상기 두 개의 랜 덤 숲 은 오 버 피 팅 에 동의 하지 않 는 다 는 것 을 결정 했다.
 
참고 자료
1 scikit - learn KFold 교차 검증 방법 
http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html
2. 랜 덤 숲 은 오 버 피 팅 이 쉽 지 않 습 니 다.
http://www.cnblogs.com/maybe2030/p/4585705.html
3. Learning Scikit-Learn. Garreta. et al

좋은 웹페이지 즐겨찾기