機械学習モデル訓練テストの完全なステップ
文章の目的:この文章は主にモデルの創立、およびテストの完全なステップを述べて、重点は各ステップの関係と作用です.文章の前提:この文章のすべてのコードはpythonで編纂して、knnアルゴリズムで経典のデータMNIST data(手書きの数字)に対して模型を創立します.これは、アルゴリズムとデータ自体をあまり気にしなくてもよい例で説明されています.文章の構造:文章はすべてのステップの作用を説明して、最後にすべてのpythonコードを貼って、本文のデータのダウンロードの住所:ここでリンクの内容を書きます
一、読み出しデータ(元データ)読み出しデータは、データ収集、元データの状態とみなすことができる.ここではcsvファイルで、具体的な読み取り方法はたくさんありますが、ここではpandasの方法を採用しています.
二、データ前処理データ前処理処理処理は、データの事前処理と修正である.主に、特徴抽出、特徴降次元、特徴空値処理、特徴変換(one-hot)、特徴正規化を含む.ターゲット値NULL処理、ターゲット値変換(one-hot)(下位次元、NULL値、one-hot変換、正規化が一般的です.)(ここで私のデータは前処理されていません.元のデータはピクチャ画素データなので、具体的にはsklearnに方法があります)
三、クロス検証データの区分モデルテストのために、まずクロス検証方法を選択し、事前にデータを区分する.(注意:クロス検証はデータの順序を変更します.元のデータが役に立つ場合は、クロス検証を先に行い、次元ダウンなどの前処理を行い、次にデモを行います)
四、モデルの構築及びテスト用に処理したデータでトレーニングモデルを構築し、モデルの評価には多くのパラメータがあり、よく使われるのは得点(対の割合)、基準率、完全率、F 1指数である.
五、予測の可能性計算分類の確率の大きさ
六、結果保存番号、原始結果、予測結果、予測確率保存csv
七、エラー分析エラー自体が重要なもので、エラーを分類して保存します.特定のエラータイプを分析する必要がある場合は、エラーを1つずつ分析できます.△例えば、「4」の分類に誤りが多い場合、「4」の重みを大きくして、十分に訓練することができる.
すべてのコード:
一、読み出しデータ(元データ)読み出しデータは、データ収集、元データの状態とみなすことができる.ここではcsvファイルで、具体的な読み取り方法はたくさんありますが、ここではpandasの方法を採用しています.
def opencsv(): # pandas
data = pd.read_csv('data/train.csv')
data1 = pd.read_csv('data/test.csv')
train_x = data.values[0:, 1:] #
train_y = data.values[0:, 0]
result_x = data1.values[0:, 0:] #
return train_x, train_y, result_x
二、データ前処理データ前処理処理処理は、データの事前処理と修正である.主に、特徴抽出、特徴降次元、特徴空値処理、特徴変換(one-hot)、特徴正規化を含む.ターゲット値NULL処理、ターゲット値変換(one-hot)(下位次元、NULL値、one-hot変換、正規化が一般的です.)(ここで私のデータは前処理されていません.元のデータはピクチャ画素データなので、具体的にはsklearnに方法があります)
三、クロス検証データの区分モデルテストのために、まずクロス検証方法を選択し、事前にデータを区分する.(注意:クロス検証はデータの順序を変更します.元のデータが役に立つ場合は、クロス検証を先に行い、次元ダウンなどの前処理を行い、次にデモを行います)
def data_pro(x,y):
x_train, x_test, y_train, y_test = train_test_split(x, y,test_size=0.1,random_state=33)
return x_train, x_test, y_train, y_test
四、モデルの構築及びテスト用に処理したデータでトレーニングモデルを構築し、モデルの評価には多くのパラメータがあり、よく使われるのは得点(対の割合)、基準率、完全率、F 1指数である.
#
knnClf = KNeighborsClassifier() # k=5 KNN 5,
knnClf.fit(x_train, ravel(y_train))
#
y_predict = knnClf.predict(x_test)
print("score on the testdata:",knnClf.score(x_test,y_test))
# print("score on the traindata:",knnClf.score(x_train,y_train))
print(classification_report(y_test,y_predict))
五、予測の可能性計算分類の確率の大きさ
#
probablity = knnClf.predict_proba(x_test)
list_pro = []
for i in range(probablity.shape[0]):
pro = max(list(probablity[i]))
list_pro.append(pro)
六、結果保存番号、原始結果、予測結果、予測確率保存csv
#
index = np.array(id).reshape((-1,1))[:,0:1]
result = pd.DataFrame(np.column_stack((index.reshape(-1,1),np.array(y_test).reshape(-1,1),np.array(y_predict).reshape(-1,1),np.array(list_pro).reshape(-1,1))),
columns=['ImageId','test_label','predict_lable','probablity'])
result.to_csv('result/knn_result.csv',index=False,header=True,encoding='gbk')
七、エラー分析エラー自体が重要なもので、エラーを分類して保存します.特定のエラータイプを分析する必要がある場合は、エラーを1つずつ分析できます.△例えば、「4」の分類に誤りが多い場合、「4」の重みを大きくして、十分に訓練することができる.
#
diff_index = []
for i in range(result.shape[0]):
diff_index.append(result['test_label'][i] != result['predict_lable'][i])
print(diff_index)
diff = result[diff_index]
diff_x = x_test_original[diff_index]
#
for i in range(len(diff_index)):
# print("label is:",diff['test_label'][i],"predict is:",diff['predict_lable'][i])
print("test label is :",diff.iloc[i]['test_label'],'predict label is :',diff.iloc[i]['predict_lable'])
x = diff_x[i]
img = x.reshape(28,28)
image_show(img)
diff.to_csv('result/knn_result_diff.csv',index=False,header=True,encoding='gbk')
すべてのコード:
import pandas as pd
import time
from numpy import ravel, savetxt
from sklearn import svm
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
def image_show(img):
plt.imshow(img)
plt.show()
def opencsv(): # pandas
data = pd.read_csv('data/train.csv')
data1 = pd.read_csv('data/test.csv')
train_x = data.values[0:, 1:] #
train_y = data.values[0:, 0]
result_x = data1.values[0:, 0:] #
return train_x, train_y, result_x
def data_pro(x,y):
x_train, x_test, y_train, y_test = train_test_split(x, y,test_size=0.1,random_state=33)
return x_train, x_test, y_train, y_test
def knnClassify(x_train, x_test, y_train, y_test):
id = range(1,x_test.shape[0]+1)
print("start run knn.")
#
knnClf = KNeighborsClassifier() # k=5 KNN 5,
knnClf.fit(x_train, ravel(y_train))
#
y_predict = knnClf.predict(x_test)
print("score on the testdata:",knnClf.score(x_test,y_test))
# print("score on the traindata:",knnClf.score(x_train,y_train))
print(classification_report(y_test,y_predict))
#
probablity = knnClf.predict_proba(x_test)
list_pro = []
for i in range(probablity.shape[0]):
pro = max(list(probablity[i]))
list_pro.append(pro)
#
index = np.array(id).reshape((-1,1))[:,0:1]
result = pd.DataFrame(np.column_stack((index.reshape(-1,1),np.array(y_test).reshape(-1,1),np.array(y_predict).reshape(-1,1),np.array(list_pro).reshape(-1,1))),
columns=['ImageId','test_label','predict_lable','probablity'])
result.to_csv('result/knn_result.csv',index=False,header=True,encoding='gbk')
#
diff_index = []
for i in range(result.shape[0]):
diff_index.append(result['test_label'][i] != result['predict_lable'][i])
print(diff_index)
diff = result[diff_index]
diff_x = x_test_original[diff_index]
#
for i in range(len(diff_index)):
# print("label is:",diff['test_label'][i],"predict is:",diff['predict_lable'][i])
print("test label is :",diff.iloc[i]['test_label'],'predict label is :',diff.iloc[i]['predict_lable'])
x = diff_x[i]
img = x.reshape(28,28)
image_show(img)
diff.to_csv('result/knn_result_diff.csv',index=False,header=True,encoding='gbk')
def svmClassify(train_x, train_y, test_x):
id = range(1, 28001)
t = time.time()
svc = svm.SVC(kernel='rbf', C=10)
svc.fit(train_x, train_y)
h = time.time()
print('time used:%f' % (h - t))
test_y = svc.predict(test_x)
k = time.time()
print('time used:%f' % (k - h))
savetxt('sklearn_svm_Result.csv', test_y, delimiter=',')
result = pd.DataFrame(np.column_stack((np.array(id).reshape((-1, 1))[:, 0:1], np.array(test_y).reshape((-1, 1))[:, 0:1])),
columns=['ImageId', 'Label'])
result.to_csv("sklearn_knn_Result2.csv", index=False, header=True, encoding='gbk')
if __name__ == "__main__":
print("start.")
#
train_x_original, train_y_original, result_x_original = opencsv()
#
x_train_original, x_test_original, y_train, y_test = data_pro(train_x_original, train_y_original)
#
pca = PCA(n_components=0.8, whiten=True)
train_x_pca = pca.fit_transform(x_train_original)
x_test_pca = pca.transform(x_test_original)
result_x_pca = pca.transform(result_x_original)
#knn
knnClassify(train_x_pca, x_test_pca, y_train, y_test)
#SVM
# svmClassify(train_x,train_y,test_x)
print("end.")