楼主: 时光人
2250 6

[网帖精选] python机器学习: 分类器的不确定度评估 [推广有奖]

  • 3关注
  • 34粉丝

已卖:165份资源

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26913 个
通用积分
429.8724
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39970 点
帖子
1630
精华
3
在线时间
580 小时
注册时间
2019-2-25
最后登录
2025-5-6

楼主
时光人 学生认证  发表于 2019-10-10 09:22:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

AIU人工智能学院:数据科学、人工智能从业者的在线大学。
数据科学(Python/R/Julia)数据分析、机器学习、深度学习

scikit-learn中有两个函数可用于获取分类器的不确定度评估:decision_function和predict_proba。大多数分类器都至少有其中一个函数。下面我们来构造一个GradientBoostingClassifier分类器(同时拥有decision_function和predic_proba两个方法):

  1. from sklearn.ensemble import GradientBoostingClassifierfrom sklearn.datasets
  2. import make_circles
  3. x, y = make_circles(noise=0.25, factor=.5, random_state=1)
  4. #为了便于说明,我们将两个类别重命名为“blue"和”red“y_named = np.array(["blue", "red"])[y]#我们可以对人一个数组调用train_test_split#所有数组的划分方式都是一致的
  5. x_train, x_test, y_train, y_test = train_test_split(x, y_named, random_state=0)
  6. #构建梯度提升模型
  7. gbrt = GradientBoostingClassifier(random_state=0).fit(x_train, y_train)
  8. #对于二分类的情况,decision_function返回值的形状是(n_samples),为每个样本都返回一个浮点数
  9. print("x_test.shape: {}".format(x_test.shape))
  10. print("decision_function shape: {}".format(gbrt.decision_function(x_test).shape))
  11. #显示decision_function的前几个元素
  12. print("decision function :\n{}".format(gbrt.decision_function(x_test)[:7]))
  13. #查看决策函数的正负号来再现预测值
  14. print("thresholded decision function:\n{}".format(gbrt.decision_function(x_test) > 0))
  15. print("Predicitons:\n{}".format(gbrt.predict(x_test)))
  16. #对于二分类问题,“反”类始终是classes_属性的第一个袁术,“正”类是classes_的第二个袁术。因此,你想要完全再现#predict输出,需要利用classes_属性#将布尔值True/False转换成0和1
  17. greater_zero = (gbrt.decision_function(x_test) > 0).astype(int)
  18. #利用0和1作为classes_的索引
  19. pred = gbrt.classes_[greater_zero]
  20. #pred与gbrt.predict的输出完全相同
  21. print("pred is equal to predicitong: {}".format(np.all(pred == gbrt.predict(x_test))))
复制代码

运行后结果如下图:

分类器的不确定性评估

decision_function可以在任意范围内取值,这块取决于数据与模型参数,下面我们利用颜色编码在二维平面中画出所有点的decision_function,还有决策边界,后者我们之前见过,对应代码如下:

  1. decision_function = gbrt.decision_function(x_test)
  2. print("decision function minimum: {:.2f} maxminum: {:.2f}".format(np.min(decision_function),np.max(decision_function)))
  3. fig, axes = plt.subplots(1, 2, figsize=(13, 5))mglearn.tools.plot_2d_separator(gbrt, x, ax=axes[0], alpha=.4, fill=True, cm=mglearn.cm2)
  4. scores_image = mglearn.tools.plot_2d_scores(gbrt, x, ax=axes[1], alpha=.4, cm=mglearn.ReBl)
  5. for ax in axes:#画出训练点和测试点
  6. mglearn.discrete_scatter(x_test[:, 0], x_test[:, 1], y_test, markers='^', ax=ax)
  7. mglearn.discrete_scatter(x_train[:, 0], x_train[:, 1], y_train, markers='o', ax=ax)
  8. ax.set_xlabel("feature 0 value")ax.set_ylabel("feature 1 value")
  9. cbar = plt.colorbar(scores_image, ax=axes.tolist)
  10. axes[0].legend(["test class 0", "test class 1", "train class 0", "train class 1"], ncol=4, loc=(.1, 1.1))
复制代码

运行后结果如下图:

梯度提升模型在一个二维玩具数据集上的决策边界(左)和决策函数(右)

由上述运行结果可知,同时给出预测结果和分类器的置信度,这样给出的信息量更大。尽管如此,我们很难分辨出两者之间的边界,对此,我们将在下一节继续讨论!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 机器学习 分类器 不确定 scikit-learn

沙发
CDA网校 学生认证  发表于 2019-10-10 11:27:52
感谢分享

藤椅
gudure 学生认证  发表于 2019-10-10 11:34:27

板凳
时光人 学生认证  发表于 2019-10-10 11:39:48

报纸
东方祥 企业认证  发表于 2019-10-10 13:12:19
谢谢分享

地板
东方祥 企业认证  发表于 2019-10-10 13:12:47
机器学习基础

7
zhengcz 发表于 2019-10-11 21:55:01
点赞!谢谢楼主分享。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 02:47