本文共 4213 字,大约阅读时间需要 14 分钟。
将现实世界中得到的数据(如文本和图像)格式化为算法可以处理的格式(数字特征)。
见另一篇Blog:
机器学习中样本数据预处理
一句话,数据决定了你的任务是成功和失败。
通常需要统计学和基础数学知识,引入一个概念:探索性数据分析(Exploratory Data Analysis, EDA )。
见Blog:
机器学习探索性数据分析
特征工程(feature engineering)
一个简单算法在精心选择的特征上的效果要比一个漂亮算法在较差的特征上的效果还要好。
通常好特征的目标是在重要的地方取不同值,而在不重要的地方不变。有时需要借助背景知识通过直觉来判断哪些是好特征。能否自动地把好特征选出来 -> 特征选择(feature selection)
from sklearn.feature_selection import VarianceThreshold
from sklearn.feature_selection import SelectKBestX_new = SelectKBest(chi2, k=2).fit_transform(X, y)
scikit-learn:
- 回归: f_regression, mutual_info_regression - 分类: chi2, f_classif, mutual_info_classif给定一个外部估计器,它为特征赋值(例如,线性模型的系数),递归特性消除(RFE)是通过递归地考虑越来越小的特性集来选择特性。首先,评估人员在初始的特性集上进行训练,并且通过一个coef_
属性或通过一个feature_importances_
属性获得每个特性的重要性。然后,最不重要的特性从当前的特性集中删除。这个过程在修剪器上递归地重复,直到最终达到所需的特特征数量。
L1-based feature selection
Tree-based feature selection
from sklearn.feature_selection import SelectFromModelfrom sklearn.svm import LinearSVCfrom sklearn.ensemble import RandomForestClassifierclf = Pipeline([ ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))), ('classification', RandomForestClassifier())])clf.fit(X, y)
使用sklearn.svm.LinearSVC与sklearn.feature_selection.SelectFromModel结合来评估要素重要性并选择最相关的特征。
深思熟虑,权衡性能和功能。统计学习方法三要素:
这可以用来将多个估计量链化合一。因为在处理数据时,通常有着一系列固定的步骤,比如特征选择、归一化和分类,此时这个方法将非常有用。
>>> from sklearn.pipeline import Pipeline>>> text_clf = Pipeline([('vect', CountVectorizer()),... ('tfidf', TfidfTransformer()),... ('clf', MultinomialNB()),... ])>>> text_clf.fit(twenty_train.data, twenty_train.target)
超参数在参数估计中是不直接学习的,在scikit-learn库中,超参数会作为参数传递给估计类的构造函数,然后在超参数空间中搜索最佳的交叉验证分数在构建参数估计量时提供的任何参数都是可以用这种方式进行优化的。
>>> from sklearn.model_selection import GridSearchCV>>> parameters = { 'vect__ngram_range': [(1, 1), (1, 2)],... 'tfidf__use_idf': (True, False),... 'clf__alpha': (1e-2, 1e-3),... }>>> gs_clf = GridSearchCV(text_clf, parameters, n_jobs=-1)>>> gs_clf = gs_clf.fit(twenty_train.data, twenty_train.target)
开发集和测试集的使命就是引导你的团队对机器学习系统做出最重要的改变。合理地设置开发集和测试集,使之近似模拟可能的实际数据情况,并处理得到一个好的结果。
我们真正想做的事情是衡量模型对新样本的泛化能力。所以,应该使用训练中未出现的数据来评估模型的性能。
机器学习初学者常犯错误的地方,如:
- 使用了与训练相同的数据来测试你的方法(简单的错误) - 使用了不平衡的训练数据(Hard)任何复杂系统都是由基础工程构成的,尤其是算法出现问题时,增量地搭建系统可以确保我们及时找出问题出现的位置和原因。
机器学习实践:
- 把精力从算法转移到数据上(也不尽然,这是从数据挖掘的角度上来谈的) - 正确设置实验的重要性《Building Machine Learning Systems with Python》
《Machine Learning in Action》
《Machine Learning Yearning》
转载地址:http://pnoji.baihongyu.com/