监督学习流水线

用 Python 设计机器学习工作流

Dr. Chris Anagnostopoulos

Honorary Associate Professor

有标签的数据

  • 特征变量(记作:X
  • 标签或类别(记作:y
credit_scoring.head(4)
  checking_status  duration  ...  foreign_worker class
0            '<0'         6  ...             yes  good
1      '0<=X<200'        48  ...             yes   bad
2   'no checking'        12  ...             yes  good
3            '<0'        42  ...             yes  good
用 Python 设计机器学习工作流

特征工程

  • 大多数分类器需要数值特征
  • 需将字符串列转换为数字

sklearn.preprocessing 中的 LabelEncoder 预处理:

le = LabelEncoder()
le.fit_transform(credit_scoring['checking_status'])[:4]
array([1, 0, 3, 1])
用 Python 设计机器学习工作流

模型拟合

  • .fit(features, labels)
  • .predict(features)
features, labels = credit_scoring.drop('class', 1), credit_scoring['class']

model_nb = GaussianNB() model_nb.fit(features, labels) model_nb.predict(features.head(5))
['good' 'bad' 'good' 'bad' 'good']

前5个样本上准确率为60%。

用 Python 设计机器学习工作流

模型选择

  • .fit() 用于优化模型参数
  • 还有其他模型呢?

AdaBoostClassifier 在前五个数据点上优于 GaussianNB

model_ab = AdaBoostClassifier()
model_ab.fit(features, labels)
model_ab.predict(features.head(5))
numpy.array(labels[0:5])
['good' 'bad' 'good' 'good' 'bad']
['good' 'bad' 'good' 'good' 'bad']
用 Python 设计机器学习工作流

性能评估

样本更大 ⇒ 准确率估计更可靠:

from sklearn.metrics import accuracy_score
accuracy_score(labels, model_nb.predict(features)) # naive bayes
0.706
accuracy_score(labels, model_ab.predict(features)) # adaboost
0.802

这个计算有何问题?

用 Python 设计机器学习工作流

过拟合与数据划分

过拟合:模型在训练数据上总比在未见过的数据上表现更好。

X_train, y_train 上训练,在 X_test, y_test 上评估准确率:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

GaussianNB().fit(X_train, y_train).predict(X_test)
用 Python 设计机器学习工作流

一个标准的监督学习流程:从特征工程开始,划分训练/测试集,然后进行模型评估与选择。但在真实问题中,这样的标准流程有时不够用。

用 Python 设计机器学习工作流

本课程将讲什么?

  1. 可扩展的流水线调参方法。
  2. 通过领域专家参与,确保预测有用。
  3. 确保模型随时间仍表现良好。
  4. 标签不足时如何拟合模型。
用 Python 设计机器学习工作流

你能预防次贷危机吗?

用 Python 设计机器学习工作流

Preparing Video For Download...