03 分類準確度

2021-10-24 13:25:50 字數 3068 閱讀 6539

在本文中,我們首先會再使用這樣的思路用我們的 knn 演算法在另外乙個更大一些的資料集上進行測試。與此同時,我們進一步來封裝 accuracy,同時也學習 sklearn 中分類的準確度相應的呼叫方式。最後,我們真正使用我們的測試資料集測試出的模型的結果來看,所謂的模型選擇是怎麼回事?在這個過程中,我們將接觸機器學習中乙個非常重要的概念,就是超引數

下面我將以手寫數字資料集為例,計算相應的分類準確度。

我們知道每乙個機器學習演算法最後都需要**一下準確率是有必要的,所以我們需要封裝一下**準確率的函式。

# metrics.py

import numpy as np

def accuracy_score

(y_true, y_predict):""

"計算y_true和y_predict之間的準確率"

從上面的步驟可以看出,y_predict 中儲存的是**的資料,但是有時候我們不關心最後的**資料,我們只關心**正確率,所以我們在我們自己實現的 knn 演算法中在封裝乙個函式 score,可以直接算出準確率。

import numpy as np

from collections import counter

from math import sqrt

from metrics import accuracy_score

class

knnclassifier

: def __init__

(self, k):""

"初始化knn分類器"

"" assert k >=1,

"k must be valid"

self.k = k

self._x_tarin = none

self._y_train = none

def fit

(self, x_train, y_train):""

"根據訓練資料集x_train和y_train訓練knn分類器"

"" self._x_train = x_train

self._y_train = y_train

return self

def predict

(self, x_predict):""

"給定待**資料集x_predict,返回表示x_predict的結果向量"

"" y_predict =

[self.

_predict

(x)for x in x_predict]

return np.

array

(y_predict)

def _predict

(self, x):""

"給定單個待**資料x,返回x_predict的**結果值"

"" distances =

[sqrt

(np.

sum(

(x_train - x)**

2))for x_train in self._x_train ]

nearest = np.

argsort

(distances)

topk_y =

[ self._y_train[i]

for i in nearest[

:self.k]

] votes =

counter

(topk_y)

return votes.

most_common(1

)[0]

[0] def score

(self, x_test, y_test):""

"根據測試資料集 x_test 和 y_test 確定當前模型的準確度"

上面我們用自己的 knn 演算法計算了分類準確度,下面我們再使用 scikit-learn 中的 accuracy_score

具體**見machine-learning

4 4 分類準確度

分類準確度的計算方式 分類正確的樣本數 總樣本數 新加了score x test,y test 函式,不關心predict的具體值是多少 predict函式在score中呼叫 只關心模型的準確度 from sklearn.neighbors import kneighborsclassifier i...

3 邏輯回歸 分類準確度

準確的有 0,0 1,1 其餘的都是 錯誤的點 from sklearn.metrics import confusion matrix 引入混淆矩陣 confusion matrix y test,y predict from sklearn.metrics import precision sc...

筆記 KNN之分類準確度

分類準確度 以sklearn中的手寫數字datasets.load digits為例,其是8 8的圖形,具有64個特徵值,類別由0到9 我們挑選出666這個圖形,將其視覺化 x digits.data some digit x 666 some digit image some digit.resh...