K近鄰算法項目實踐---酒的分類

一、概述

數(shù)據(jù)集:數(shù)據(jù)集來自 scikit-learn 內(nèi)置的紅酒數(shù)據(jù)集,包括數(shù)據(jù) 'data', 目標分類 'target', 目標分類名'target_names', 數(shù)據(jù)描述'DESCR', 以及特征變量的名稱'features_names',共 178 個樣本,每個樣本有13 個特征變量,最終被歸入 3 個類別中。

二、代碼邏輯

1.載入數(shù)據(jù)集
2.切分訓練集和測試集(默認情況下 75%及對應(yīng)標簽歸為訓練集,25%及對應(yīng)標簽歸為測試集)
3.用K近鄰算法進行建模
4.在訓練數(shù)據(jù)集上進行訓練,在測試集上驗證測試結(jié)果,不理想就調(diào)節(jié)參數(shù)
5.預(yù)測新樣本的分類

三、源碼

import numpy as np
from sklearn.datasets import load_wine #載入內(nèi)置酒數(shù)據(jù)集
from sklearn.model_selection import train_test_split #數(shù)據(jù)集拆分工具
from sklearn.neighbors import KNeighborsClassifier #導入 KNN 分類器
wine_data = load_wine()
#酒數(shù)據(jù)的鍵值查看
print('===============')
print("紅酒數(shù)據(jù)集中的鍵:\n{}".format(wine_data.keys()))
print('\n')
print('===============')
print('數(shù)據(jù)概況:{}'.format(wine_data['data'].shape))
print('\n')
print('===============')
print('紅酒分類:{}'.format(wine_data['target']))

#拆分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(wine_data['data'], wine_data['target'], random_state=0)

#設(shè)定模型參數(shù)為 1
knn = KNeighborsClassifier(n_neighbors=1) #KNN

#數(shù)據(jù)擬合
knn.fit(X_train, y_train)

#訓練數(shù)據(jù)預(yù)測
print('==========================')
print('訓練數(shù)據(jù)得分:{:.2f}'.format(knn.score(X_train, y_train)))

#測試數(shù)據(jù)預(yù)測
print('==========================')
print('測試數(shù)據(jù)得分:{:.2f}'.format(knn.score(X_test, y_test)))

#假定得到一瓶新的酒,預(yù)測酒的分類
X_new = np.array([[13.2, 2.77, 2.51, 18.5, 96.6, 1.04, 2.55, 0.57, 1.47, 6.2, 1.05, 3.33, 820]])

#進行預(yù)測
prediction = knn.predict(X_new)
print('==========================')
print('預(yù)測新紅酒的分類是:{}'.format(wine_data['target_names'][prediction]))

執(zhí)行結(jié)果為

===============
紅酒數(shù)據(jù)集中的鍵:
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])


===============
數(shù)據(jù)概況:(178, 13)


===============
紅酒分類:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
==========================
訓練數(shù)據(jù)得分:1.00
==========================
測試數(shù)據(jù)得分:0.76
==========================
預(yù)測新紅酒的分類是:['class_2']

四、關(guān)于調(diào)參

可以使用網(wǎng)格法調(diào)參,后續(xù)補充,主要調(diào)節(jié)的是 n_neighbors 值。
但是,K近鄰算法 對超大規(guī)模數(shù)據(jù)集擬合時間長、對高維數(shù)據(jù)集擬合欠佳、以及對稀疏矩陣束手無策

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容