標准化:用數據的特征列減去該特征列均值進行中心化,再除以標准差進行縮放
1、模型精確度的探究
from sklearn.datasets import load_iris #導入鳶尾花數據集 from sklearn.neighbors import KNeighborsClassifier #導入k-近鄰分類模型 from sklearn.model_selection import train_test_split as tsplit from sklearn.preprocessing import StandardScaler #標准化函數導入 X,y=load_iris(return_X_y=True) #導入的數據是數組形式 X_train,X_test,y_train,y_test=tsplit(X,y,test_size=0.1) #test_size是數據划分的比列,X為訓練集,y為測試集,二者的比例為9:1 transfer=StandardScaler() #標准化 X_train=transfer.fit_transform(X_train) X_test=transfer.transform(X_test) estimator=KNeighborsClassifier() #實例化模型。n_neighbors參數默認值為5 estimator.fit(X_test,y_test) #訓練模型 print(estimator.score(X_test,y_test)) #模型測試精度(介於0~1)
2、繪制鳶尾花的分類圖
from sklearn.datasets import load_iris import seaborn as sns import matplotlib.pyplot as plt import pandas as pd plt.rcParams["font.sans-serif"]=["SimHei"] #設置中文字體 plt.rcParams["axes.unicode_minus"]=False X,y=load_iris(return_X_y=True) iris_d=pd.DataFrame(X,columns=['Sepal_Length','Sepal_Width','Petal_length','Petal_Width']) #將導入的array數組類型數據轉化為DataFrame類型 iris_d['Species']=y #加1列類別 def plot_iris(iris, col1, col2): sns.lmplot(x = col1, y = col2, data =iris, hue = "Species", fit_reg = False) plt.xlabel(col1) plt.ylabel(col2) plt.title('鳶尾花種類分布圖') plt.show() plot_iris(iris_d, 'Petal_Width', 'Sepal_Length')
3、附男生受歡迎程度
# 三個特征值(每月飛行公里數,吃甜點量,打游戲時間),三個目標值(1:差,2:中3:優)'''(該csv文件不在,是模型引用的展示,只要是相同形式的csv文件,都可以直接套用;不一樣的形式可以利用pandas切片等函數改成相同形式。)/ import sklearn from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier import pandas as pd import numpy as np man = pd.read_csv("E:\\dating.csv") #導入csv文本數據 man_1=man[['milage','Liters','Consumtime']] man_2=man['target'] man.data=np.array(man_1) man.target=np.array(man_2) x_train, x_test, y_train, y_test = train_test_split(man.data, man.target, test_size=0.2, ) 3、特征工程:標准化 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) 4、機器學習(模型訓練) estimator = KNeighborsClassifier(n_neighbors=9) estimator.fit(x_train, y_train) 5、模型評估 方法1:比對真實值和預測值 y_predict = estimator.predict(x_test) print("預測結果為:\n", y_predict) print("比對真實值和預測值:\n", y_predict == y_test) 方法2:直接計算准確率 score = estimator.score(x_test, y_test) print("准確率為:\n", score)`
K-近鄰算法(k-近鄰分類模型)總結
優點:
簡單有效
重新訓練的代價低
適合類域交叉樣本
KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。
適合大樣本自動分類
該算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域采用這種算法比較容易產生誤分。
缺點:
惰性學習
KNN算法是懶散學習方法(lazy learning,基本上不學習),一些積極學習的算法要快很多
類別評分不是規格化
輸出可解釋性不強
計算量較大
參考原文鏈接:https://blog.csdn.net/weixin_44868393/article/details/106683294