训练二元分类器

训练二元分类器

现在先简化问题,只尝试识别一个数字,比如数字5。那么这个“数字5检测器”就是一个二元分类器的示例,它只能区分两个类别:5和非5。为此分类任务创建目标向量:
由于y是字符串数组
先要对y数据类型处理,便于后续的分类处理:

y = y.astype(np.uint8)

将y中的值转变为[0,255]区间的整数。
创建测试集和训练集。
由于X数组里面的数据本身就无规律,因此不需要随机取样。

X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]

y_train_5 = (y_train == 5) # 得到一个布尔数组 
y_test_5 = (y_test == 5)

接着挑选一个分类器并开始训练。一个好的初始选择是随机梯度下降(SGD)分类器,使用Scikit_Learn 的SGDClassifier类即可。这个分类器的优势是能够有效处理非常大型的数据集。这部分是因为SGD独立处理训练实例,一次一个(这也使得SGD非常适合在线学习),稍后我们将会看到。此时先创建一个SGDClassifier并在整个训练集上进行训练。

from sklearn.linear_model import SGDClassifier

sgd_clf = SGDClassifier(max_iter=1000, tol=1e-3, random_state=42)
#表示迭代1000次 误差为1e-3

sgd_clf.fit(X_train, y_train_5)


试试结果如何:

for i in range(20):
    print(sgd_clf.predict(pd.DataFrame([X.loc[i,:]])))

结果如下:

[ True]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[ True]
[False]
[False]
[False]
[False]
[False]
[False]
[False]
[False]

结果表示第一个和第十二个数是5,果真如此吗?

print(y[0],y[11])
# 5 5

结果非常正确!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值