用交叉驗證調整KNN模型的引數

2021-08-24 20:33:25 字數 1857 閱讀 1340

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

#載入資料

def inspect_data(file_root):

dataframe=pd.read_csv(file_root)

print("資料基本資訊:")

print(dataframe.info())

print("資料有%i行,%i列"%(dataframe.shape[0],dataframe.shape[1]))

print("資料預覽:")

print(dataframe.head())

return dataframe

#缺失資料處理

def processing_missing_data(dataframe):

if dataframe.isnull().values.any():

dataframe=dataframe.dropna()

#dataframe=dataframe.fillna(0)

return dataframe

#載入資料

dataframe=pd.read_csv("h:/pythonfigure/voice.csv")

#處理缺失資料

dataframe=processing_missing_data(dataframe)

#資料轉化

dataframe.replace("male",1,inplace=true)

dataframe.replace("female",0,inplace=true)

#資料準備

x=dataframe.ix[:,:-1]

y=dataframe.ix[:,-1]

#特徵歸一化

from sklearn import preprocessing

x=preprocessing.scale(x)

#分割訓練集和測試集

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=1/3.,random_state=5)

#交叉驗證

from sklearn.model_selection import cross_val_score

from sklearn.neighbors import kneighborsclassifier

k_range=range(1,31)

cv_score=

for k in k_range:

knn=kneighborsclassifier(k)

scores=cross_val_score(knn,x_train,y_train,cv=10,scoring="accuracy")

score_mean=scores.mean()

print(k,score_mean)

best_k=np.argmax(cv_score)+1

print("最優的k是%i"%(best_k))

plt.plot(k_range,cv_score)

plt.xlabel("k")

plt.ylabel("score")

plt.show()

#模型訓練

knn_model=kneighborsclassifier(best_k)

knn_model.fit(x_train,y_train)

print("模型準確率:",knn_model.score(x_test,y_test))

5折交叉驗證 模型評估之K折交叉驗證

上節我們說了留出法,這次說下k折交叉驗證,這是我們做模型評估時經常使用的方法。k折交叉驗證的3個要點 1 資料集劃分為k個相同大小的互斥子集。2 通過分層抽樣k個子集保持分布一致性。3 k次評估結果的均值,每次用k 1個集合訓練,剩下的乙個做模型評估。上述例子中共有樣本10個,我們做了5折交叉驗證,...

機器學習之模型選擇(交叉驗證)

問題 交叉驗證 cross validation 1 使用s 來訓練每乙個mi,訓練出引數後,也就可以得到假設函式hi。比如,線性模型 中得到w後,也就得到了假設函式 w 2 選擇錯誤率最小的假設函式。1 從全部的訓練資料s 中隨機選擇70 的樣例作為訓練集strain,剩餘的30 作為測試集 sc...

交叉驗證與網格搜尋(以KNN分類鳶尾花為例)

總結 import pandas as pd pd.set option display.max rows 6 1獲取資料 from sklearn.datasets import load iris iris load iris 新建乙個dataframe,把iris中data方進來,並且data...