いくつかの分類モデルトレーニングirisデータセット

10130 ワード

いくつかの一般的な分類アルゴリズムを用いてirisデータを訓練し,利K折交差検証法を用いて評価した.
K折交差検証:sklearn.model_selection.KFold(n_splits=k, shuffle=False, random_state=None)
構想:トレーニング/テストデータセットをn_に分割するsplits個の反発サブセット、毎回そのうちの1つのサブセットを検証セットとして使用し、残りのn_splits-1個をトレーニングセットとしてn_splits次訓練とテスト、n_を得るsplits個の結果
パラメータの説明:n_splits:shuffleをいくつか等分することを表します:区分するたびに、トランプをするかどうか①Falsesの場合、その効果はrandom_に等しいですstateは整数に等しく、区分ごとの結果が同じ②Trueの場合、区分ごとの結果が異なり、シャッフルを経てランダムにサンプリングされたrandom_を示すstate:ランダムシード数
データセット:iris(この例ではローカルファイルから取得)
コード#コード#

import pandas as pd
import numpy as np

from sklearn.metrics import accuracy_score
from sklearn.model_selection import KFold


from sklearn import tree
from sklearn import naive_bayes
from sklearn import svm
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.neural_network import MLPClassifier


# 
data = pd.read_csv('iris.csv',header=None)
data.columns = [" "," "," "," ","category"]

X = data.iloc[:,0:4]
Y = data.iloc[:,4]


k = 10
kf = KFold(n_splits=k, shuffle=True)

def eval_model(model_name,model):
    accuracies = []
    i=0
    for train_index, test_index in kf.split(data): # 
        x_train, x_test = X.loc[train_index] ,X.loc[test_index]
        y_train, y_test = Y.loc[train_index] ,Y.loc[test_index]
        
        model.fit(x_train,y_train) # 
        y_predict = model.predict(x_test) # 
        
        accuracy = accuracy_score(y_pred=y_predict,y_true=y_test) # 
        accuracies.append(accuracy)
        i+=1
        print(' {} : {}'.format(i,accuracy))
        
    print(model_name+" : ",np.mean(accuracies))
    
    
models={
        'decision tree':lambda:tree.DecisionTreeClassifier(),
        'random forest':lambda:RandomForestClassifier(n_estimators=100),
        'naive bayes':lambda:naive_bayes.GaussianNB(),
        'svm':lambda:svm.SVC(gamma='scale'),
        'GBDT':lambda:GradientBoostingClassifier(),
        'MLP':lambda:MLPClassifier(max_iter=1000),        
        }


for name,m in models.items():
    eval_model(name,m())