在本文中,我們首先會再使用這樣的思路用我們的 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...