加載手寫識別數字數據集
import numpy
from sklearn import datasets
import matplotlib.pyplot as plt
digits = datasets.load_digits()
x = digits.data
y = digits.target
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.8,random_state=666)
用邏輯回歸訓練
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
# sklearn中默認使用OVR方式解決多分類問題
log_reg.fit(x_train,y_train)
y_predict = log_reg.predict(x_test)
log_reg.score(x_test,y_test)
查看多分類問題的混淆矩陣
from sklearn.metrics import confusion_matrix
cfm = confusion_matrix(y_test,y_predict)

將數據與灰度值對應起來:
# cmap為顏色映射,gray為像素灰度值
plt.matshow(cfm,cmap=plt.cm.gray)

去除預測正確的對角線數據,查看混淆矩陣中的其他值
row_sum = numpy.sum(cfm,axis=1)
err_matrix = cfm / row_sum
numpy.fill_diagonal(err_matrix,0)
plt.matshow(err_matrix,cmap=plt.cm.gray)

上圖不僅可以看出哪個地方犯的錯誤多,還可以看出是什么樣的錯誤,例:算法會偏向於將值為1的數據預測為9,將值為8的數預測為1。
在算法方面,應該考慮調整1、8、9的決策閾值以增強算法的准確率。在手寫識別數據集方面,應該考慮處理數據,如消除數據集的噪點和干擾點,提高清晰度和可識別程度。
