分類準确度
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
X = digits.data
y = digits.target
#取前一百列
y[:100]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 5, 5, 6, 5, 0, 9, 8, 9, 8, 4, 1, 7,
7, 3, 5, 1, 0, 0, 2, 2, 7, 8, 2, 0, 1, 2, 6, 3, 3, 7, 3, 3, 4, 6,
6, 6, 4, 9, 1, 5, 0, 9, 5, 2, 8, 2, 0, 0, 1, 7, 6, 3, 2, 1, 7, 4,
6, 3, 1, 3, 9, 1, 7, 6, 8, 4, 3, 1])
array([[ 0., 0., 5., 13., 9., 1., 0., 0., 0., 0., 13., 15., 10.,
15., 5., 0., 0., 3., 15., 2., 0., 11., 8., 0., 0., 4.,
12., 0., 0., 8., 8., 0., 0., 5., 8., 0., 0., 9., 8.,
0., 0., 4., 11., 0., 1., 12., 7., 0., 0., 2., 14., 5.,
10., 12., 0., 0., 0., 0., 6., 13., 10., 0., 0., 0.],
[ 0., 0., 0., 12., 13., 5., 0., 0., 0., 0., 0., 11., 16.,
9., 0., 0., 0., 0., 3., 15., 16., 6., 0., 0., 0., 7.,
15., 16., 16., 2., 0., 0., 0., 0., 1., 16., 16., 3., 0.,
0., 0., 0., 1., 16., 16., 6., 0., 0., 0., 0., 1., 16.,
16., 6., 0., 0., 0., 0., 0., 11., 16., 10., 0., 0.],
[ 0., 0., 0., 4., 15., 12., 0., 0., 0., 0., 3., 16., 15.,
14., 0., 0., 0., 0., 8., 13., 8., 16., 0., 0., 0., 0.,
1., 6., 15., 11., 0., 0., 0., 1., 8., 13., 15., 1., 0.,
0., 0., 9., 16., 16., 5., 0., 0., 0., 0., 3., 13., 16.,
16., 11., 5., 0., 0., 0., 0., 3., 11., 16., 9., 0.],
[ 0., 0., 7., 15., 13., 1., 0., 0., 0., 8., 13., 6., 15.,
4., 0., 0., 0., 2., 1., 13., 13., 0., 0., 0., 0., 0.,
2., 15., 11., 1., 0., 0., 0., 0., 0., 1., 12., 12., 1.,
0., 0., 0., 0., 0., 1., 10., 8., 0., 0., 0., 8., 4.,
5., 14., 9., 0., 0., 0., 7., 13., 13., 9., 0., 0.],
[ 0., 0., 0., 1., 11., 0., 0., 0., 0., 0., 0., 7., 8.,
0., 0., 0., 0., 0., 1., 13., 6., 2., 2., 0., 0., 0.,
7., 15., 0., 9., 8., 0., 0., 5., 16., 10., 0., 16., 6.,
0., 0., 4., 15., 16., 13., 16., 1., 0., 0., 0., 0., 3.,
15., 10., 0., 0., 0., 0., 0., 2., 16., 4., 0., 0.],
[ 0., 0., 12., 10., 0., 0., 0., 0., 0., 0., 14., 16., 16.,
14., 0., 0., 0., 0., 13., 16., 15., 10., 1., 0., 0., 0.,
11., 16., 16., 7., 0., 0., 0., 0., 0., 4., 7., 16., 7.,
0., 0., 0., 0., 0., 4., 16., 9., 0., 0., 0., 5., 4.,
12., 16., 4., 0., 0., 0., 9., 16., 16., 10., 0., 0.],
[ 0., 0., 0., 12., 13., 0., 0., 0., 0., 0., 5., 16., 8.,
0., 0., 0., 0., 0., 13., 16., 3., 0., 0., 0., 0., 0.,
14., 13., 0., 0., 0., 0., 0., 0., 15., 12., 7., 2., 0.,
0., 0., 0., 13., 16., 13., 16., 3., 0., 0., 0., 7., 16.,
11., 15., 8., 0., 0., 0., 1., 9., 15., 11., 3., 0.],
[ 0., 0., 7., 8., 13., 16., 15., 1., 0., 0., 7., 7., 4.,
11., 12., 0., 0., 0., 0., 0., 8., 13., 1., 0., 0., 4.,
8., 8., 15., 15., 6., 0., 0., 2., 11., 15., 15., 4., 0.,
0., 0., 0., 0., 16., 5., 0., 0., 0., 0., 0., 9., 15.,
1., 0., 0., 0., 0., 0., 13., 5., 0., 0., 0., 0.],
[ 0., 0., 9., 14., 8., 1., 0., 0., 0., 0., 12., 14., 14.,
12., 0., 0., 0., 0., 9., 10., 0., 15., 4., 0., 0., 0.,
3., 16., 12., 14., 2., 0., 0., 0., 4., 16., 16., 2., 0.,
0., 0., 3., 16., 8., 10., 13., 2., 0., 0., 1., 15., 1.,
3., 16., 8., 0., 0., 0., 11., 16., 15., 11., 1., 0.],
[ 0., 0., 11., 12., 0., 0., 0., 0., 0., 2., 16., 16., 16.,
13., 0., 0., 0., 3., 16., 12., 10., 14., 0., 0., 0., 1.,
16., 1., 12., 15., 0., 0., 0., 0., 13., 16., 9., 15., 2.,
0., 0., 0., 0., 3., 0., 9., 11., 0., 0., 0., 0., 0.,
9., 15., 4., 0., 0., 0., 9., 12., 13., 3., 0., 0.]])
取第666個片段(每個片段代表一個數字)
可以改成8x8的形式
import matplotlib
import matplotlib.pyplot as plt
plt.imshow(some_digit_image, cmap = matplotlib.cm.binary)
plt.show()
可以看出這是個0,然後我們用
發現結果也是0,對應上了,如果把666換成其他數字也是一樣
接下來用之前自己封裝的函數進行測試
from machine_learning import train_test_split
X_train,y_train,X_test,y_test = train_test_split(X, y, test_radio=0.2)
from knnClassify import KnnClassify
my_knn_clf = KnnClassify(k=6)
my_knn_clf.fit(X_train, y_train)
y_predict = my_knn_clf.predict(X_test)
sum(y_predict == y_test) / len(y_test)
0.9860724233983287
我們可以将最後算準确度的編一個函數放入所需子產品中,這樣可以直接調用計算算法的準确度
封裝我們自己的accuracy_score
metrics
import numpy as np
def accuracy_score(y_true, y_predict):
return sum(y_true == y_predict) / len(y_true)
資料歸一化
将所有的資料映射到同一尺度
最值歸一化: 把所有資料映射到0-1之間
均值方差歸一化
把所有資料歸一到均值為0方差為1的分布中
适用于資料分布沒有明顯邊界;有可能存在極端情況值
scikit-learn 中的StandardScaler
from sklearn.preprocessing import StandardScaler
standardScaler = StandardScaler()
# 存放了均值方差歸一化所對應的資訊
standardScaler.fit(X_train)
StandardScaler(copy=True, with_mean=True, with_std=True)
### 均值
standardScaler.mean_
### 描述資料的分布範圍(标準差)
standardScaler.scale_