Project 1 的几个问题

老师,有几个关于project 1的问题

  1. notebook 3
    Importances = pipeline.steps[3][1].feature_importances_
    这个[1]指的是第四步‘model’中的feature列吗?我在K-nearest 的python note也看到类似label[0][0]的写法,这里label和step都是list,如果只有一个[ ] 表示indexing, 那两个[ ] 怎么理解?

  2. notebook 3
    老师您把F1 value的standard deviation也加在里面,对比keras classifier vs gradient descent的时候,你说keras 的F1 std小一些,并不比gradient descent差。这里的F1 std和我们讲的model variance 算一个概念吗?如果feature 多,容易overfitting,overfitting时候test error会大即F1 value应该小,over fitting的时候F1 value的standard deviation也很高吗?

  3. notebook 3
    这个project我们并没有用到regularization,您在课上提到feature selection个数要结合F1 value和业务逻辑一起看。那如果想用regularization,sklearn哪里可以实现?

  4. notebook 2

用户购买最多的dow,用了Lamda x: x.mode()[0],我不太理解这个lamda函数,特别是()[0]这部分,老师能否解释一下这个?

谢谢老师!

  1. 这里的pipeline.steps[3]是一个tuple, 它里面第一个元素表示这个step的名字,这些名字可能是"model", 也可能是 “ scaler” 等等。第二个元素是操作本身。对应于pipeline.steps[3],它应该是
('model', GradientBoostingClassifier(learning_rate=0.005, max_depth=4))

因此要想得到这个model, 必须用pipeline.steps[3][1]

  1. 这里的 “F1 std” 与 “一个模型的 variance” 两者不是一个概念。模型的variance来自于样本训练数据的随机性,是针对一个模型来说的。而这里的F1 values,它其实是一个list,由于我们做了多次cross validation, 得到了多个模型,所以得到了很多个F1 value, 我们一般来说是看这个metric 的mean value, 以此作为model evaluation时作比较使用的metric,同时它的variance也说明了这个model的F1 value的稳定性。我们当然是希望找到一个model, 它的F1 value的均值高,同时变化幅度小。

  2. 你在notebook 3也用到了regularization, 在 LogisticRegression() 模型中,默认使用L2 regularization.

  3. x.mode()是计算一列元素的众数,也就是出现做最多的元素的信息。同时,由于一列元素中出现最多次数的元素可能同时有多个,因此我们选择第一个元素作为返回结果。

老师,顺便再问下这里model selection只用了F1,可以或者有必要同时用accuracy(已经调整了imbalance)和AUC看一下吗?

  1. 老师 ,您指的是 pipeline.steps 是一个tuple 是吗? (您打的是pipeline.steps[3]是一个tuple)

  2. KNN notebook里 labels.append(label[0][0]) ,我在python里点击label,它的定义是 (variable) label: list[Tuple[Any, int]],这里的 list[Tuple] 到底label是一个list还是Tuple?第二个label[0][0]第二个[0]有些不理解。

恩可以。F1, AUC和accuracy都可以同时作为offline evaluation的参考。一般来说在实际工作中,我们唯一看重的是a/b test的result, 比如把你的这个repurchase recommendation system上线,同时与之前的版本比较,看最后的revenue效果。这是检验你这个模型好坏的唯一标准。其他这些offline metrics, e.g. AUC, F1, etc. 只是作为一些参考。

  1. 是的。你也可以在代码里print一下这部分数据。这个tuple的第一个元素是它的名字,第二个元素是对应里面的内容。
  2. 这个label是 a list of tuples. 这个tuple里面的第一个元素是名字,第二个元素是次数统计。我们这里 label[0][0], 是找到出现次数最多的label, 也就是label[0] 这个排第一名的most common label. 然后拿这个tuple的第一个元素,也就是名字,即 label[0][0]