機器學習 KNN分類演算法(下)

2021-09-29 17:19:51 字數 2925 閱讀 3813

機器學習-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...