数据处理
import numpy as np
import pandas as pds
from sklearn import datasets
mnist = datasets.load_digits()
images = mnist.images
data, labels = mnist.data, mnist.target
- 查看图片
import matplotlib.pyplot as plt
plt.imshow(images[0])
划分数据集为训练集和测试集
- 运用 sklearn 的方法
from sklearn.model_selection import train_test_split
images = images.reshape((1797, -1))
train_x, test_x, train_y, test_y = train_test_split(images, labels, test_size=0.2)
训练模型
- 这里用了k邻算法进行数据分类
from sklearn.neighbors import KNeighborsClassifier
kn_clf = KNeighborsClassifier(10)
model = kn_clf.fit(train_x, train_y)
评估模型
混淆矩阵
大概是这样的一个计算方式
from sklearn.metrics import confusion_matrix
confusion_matrix(train_y, model.predict(train_x))
交叉验证
from sklearn.model_selection import cross_val_score
cross_val_score(kn_clf, train_x, train_y, cv=3)
精度和查全率
关于精度和查全率,可以查看我上一篇文章。
p1 = TP/TP + FP p2 = TP/TP + FN
from sklearn.metrics import recall_score, accuracy_score
print(accuracy_score(train_y, model.predict(train_x)))
recall_score(train_y, model.predict(train_x), average ="micro")
f1_score
x-u/std
这将会平均每个数字的权重,平时越大的数影响越大,现在大的和小的都被归属到0-1之间或特定数值间。
比如:平时10000, 100, 20, 对于10000的影响明显要更大,而现在10000- 8778/10000 范围也在0-1内,降低了大的数值影响的权重,而小数字不变。
from sklearn.metrics import f1_score
f1_score(train_y, model.predict(train_x), average ="micro")
以上,就是目前学习到的多分类的评估方法。