一、概述
數(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ù)集擬合欠佳、以及對稀疏矩陣束手無策