機器學習-knn分類演算法(上)之前寫了knn的基本概念和python基本實現方法,並沒有對模型的好壞進行判斷,接下來使用訓練資料集和測試資料集來判斷(使用accurcay分類指標)
(一)自定義分割資料集方法 data_shuffer.py
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
iris = datasets.load_iris()
x = iris.data
y = iris.target
print(x.shape)
# (150, 4)
---------方法1---------
# 使用concatenate函式進行拼接,因為傳入的矩陣必須具有相同的形狀。
# 因此需要對label進行reshape操作,axis=1表示縱向拼接。
tempconcat = np.concatenate((x, y.reshape(-1,1)), axis=1)
# 拼接好後,直接進行亂序操作
np.random.shuffle(tempconcat)
# 再將shuffle後的陣列使用split方法拆分
shuffle_x,shuffle_y = np.split(tempconcat, [4], axis=1)
# 設定劃分的比例
test_ratio = 0.2
test_size = int(len(x) * test_ratio)
x_train = shuffle_x[test_size:]
y_train = shuffle_y[test_size:]
x_test = shuffle_x[:test_size]
y_test = shuffle_y[:test_size]
---------方法2---------
# 將x長度這麼多的數,返回乙個新的打亂順序的陣列,
注意,陣列中的元素不是原來的資料,而是混亂的索引
shuffle_index = np.random.permutation(len(x))
# 指定測試資料的比例
test_ratio = 0.2
test_size = int(len(x) * test_ratio)
test_index = shuffle_index[:test_size]
train_index = shuffle_index[test_size:]
x_train = x[train_index]
x_test = x[test_index]
y_train = y[train_index]
y_test = y[test_index]
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
(二)呼叫sklearn分類準確度指標
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import kneighborsclassifier
digits = datasets.load_digits()
x = digits.data
y = digits.target
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=666)
knn_clf = kneighborsclassifier(n_neighbors=3)
knn_clf.fit(x_train, y_train)
y_predict = knn_clf.predict(x_test)
print(accuracy_score(y_test, y_predict))
(三)尋找好的k值
from sklearn.model_selection import train_test_split
from sklearn.neighbors import kneighborsclassifier
from sklearn import datasets
digits = datasets.load_digits()
x = digits.data
y = digits.target
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=666)
# 指定最佳值的分數,初始化為0.0;設定最佳值k,初始值為-1
best_score = 0.0
best_k = -1
for k in range(1, 11): # 暫且設定到1~11的範圍內
knn_clf = kneighborsclassifier(n_neighbors=k)
knn_clf.fit(x_train, y_train)
score = knn_clf.score(x_test, y_test)
if score > best_score:
best_k = k
best_score = score
print("best_k = ", best_k)
print("best_score = ", best_score)
機器學習分類演算法(一)k NN分類演算法
k kk nn分類器是最簡單的機器學習分類演算法之一,它的基本思想是 從訓練樣本集中找出與測試樣本 距離 最近的k個樣本作為此測試樣本的 鄰居 然後根據這k個樣本的類別基於一定規則進行投票表決,最高的決定為測試樣本的 類別。用乙個詞來說就是 近朱者赤近墨者黑 由以上所述可以得知,k近鄰分類演算法主要...
python 機器學習KNN分類演算法
k近鄰演算法是機器學習中最簡單的演算法,其可以做最基本的分類操作,偽 如下 對未知類別屬性的資料集中的每個點依次執行以下操作 1 計算已知類別資料集中的每個點與當前點之間的距離 2 按照距離遞增次序排序 3 選怒與當前點距離最小的k個點 4 確定前k個點所在類別出現的頻率 5 返回前k個點出現頻率最...
機器學習 KNN分類演算法(上)
k近鄰演算法是機器學習演算法最簡單的演算法,流程如下 1 計算測試物件到訓練集中每個物件的距離 2 按照距離的遠近排序 3 選取與當前測試物件最近的k個物件,作為該測試物件的鄰居 4 統計這k個鄰居的類別頻率 5 k個鄰居裡頻率最高的類別,即為測試物件的類別 1 自實現knn演算法import nu...