傻⽠式⾃动机器学习库:TPOT
官⽅⽂档请戳这⾥?:
现有的⼤部分博⽂都是参考官⽅⽂档的,还是直接看最正宗的吧,看英⽂还是需要些耐⼼的吧,哈哈哈~
0. 概述
它⼀种基于遗传算法优化机器学习管道(pipeline)的Python⾃动机器学习⼯具。
简单来说,就是TPOT可以智能地探索数千个可能的pipeline,为数据集找到最好的pipeline,从⽽实现机器学习中最乏味的部分。
由上图可知,TPOT可以⾃动实现阴影部分的特征⼯作,包含特征选择、特征预处理、特征构建、同时还可以进⾏模型选择和参数调优。最主要的是,⼀旦TPOT完成搜索,TPOT同时还提供Python代码,⽅便后续修改。(此处如果有疑惑,可以看下下⾯的栗⼦很快就明⽩了)
1. 以IRIS数据集为例,使⽤TPOT
TPOT的接⼝,与scikit-learn很类似,熟练使⽤过scikit-learn的同学可以很快上⼿。
直接上代码:
# 直接导⼊即可,此处使⽤的是分类器
from tpot import TPOTClassifier
from sklearn.datats import load_iris
del_lection import train_test_split
import numpy as np
# 导⼊数据集,构建训练和测试样本
iris = load_iris()
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,train_size=0.75,test_size=0.25)
# 建模,拟合,预测
aj是什么意思tpot = TPOTClassifier(generations=5,population_size=20,verbosity=2)
tpot.fit(X_train,y_train)
print(tpot.score(X_test,y_test))
# 此处,对应于 "⼀旦TPOT完成搜索,TPOT同时还提供Python代码"
输出,红线部分对应与最优pipeline和参数:
TPOT提供的python代码:
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
del_lection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.pipeline import make_pipeline, make_union
import DecisionTreeClassifier
from tpot.builtins import StackingEstimator
# NOTE: Make sure that the class is labeled 'target' in the data file
tpot_data = pd.read_csv('PATH/TO/DATA/FILE', p='COLUMN_SEPARATOR', dtype=np.float64)
features = tpot_data.drop('target', axis=1).values
training_features, testing_features, training_target, testing_target = \
train_test_split(features, tpot_data['target'].values, random_state=None)
# Average CV score on the training t was:0.9731225296442687
exported_pipeline = make_pipeline(
StackingEstimator(estimator=GaussianNB()),
StackingEstimator(estimator=DecisionTreeClassifier(criterion="gini", max_depth=1, min_samples_leaf=2, min_samples_split=2)),
LogisticRegression(C=20.0, dual=Fal, penalty="l1")
)
exported_pipeline.fit(training_features, training_target)
results = exported_pipeline.predict(testing_features)
语言表达能力培训2. TPOT API
参数:
generations: int, optional (default=100),运⾏管道优化过程的迭代次数。⼀定是正数。⼀般来说,值越⼤,性能越好。
population_size: int, optional (default=100),在每⼀代遗传中保留的个体数。⼀定是正数。⼀般来说,值越⼤,性能越好。
offspring_size: int, optional (default=100),在每⼀次遗传过程中产⽣的后代数量。⼀定是正数。
apb
mutation_rate: float, optional (default=0.9),变异率,采⽤默认值即可。
小学四年级英语视频crossover_rate: float, optional (default=0.1),交叉率,采⽤默认值即可。
日文翻译器下载scoring: string or callable, optional (default='neg_mean_squared_error'),回归问题中⽤于评估给定管道的质量的函数。可以使⽤以下内置评分函数:'neg_median_absolute_error', 'neg_mean_absolute_error', 'neg_mean_squared_error', 'r2'
cv: int, cross-validation generator, or an iterable, optional (default=5)
subsample: float, optional (default=1.0),在TPOT优化过程中使⽤的训练样本的⽐例。必须在0到1之间。
n_jobs: integer, optional (default=1)
max_time_mins: integer or None, optional (default=None),TPOT需要多少分钟来优化管道。tonight tonight
max_eval_time_mins: integer, optional (default=5),TPOT需要多少分钟来评估⼀个管道。
random_state: integer or None, optional (default=None),使⽤这个参数来确保TPOT每次运⾏时都会有相同的结果。
config_dict: Python dictionary, string, or None, optional (default=None),⽤于定制TPOT在优化过程中搜索的操作符和参数的配置字典。
mountainlion
warm_start: boolean, optional (default=Fal),表明TPOT实例是否会重⽤以前调⽤fit()的⼊⼝。
early_stop: integer, optional (default: None)
verbosity: integer, optional (default=0),
不错的美剧
0将不会打印任何东西
1将打印很少的信息
2打印更多的信息并提供⼀个进度条
3打印所有内容,并提供⼀个进度条
⽅法
fit(features, target, sample_weight=None, groups=None),在给定的训练数据上运⾏TPOT优化过程。
predict(features),使⽤优化的管道来预测测试集的⽬标值。
考研数学三国家线score(testing_features, testing_target),使⽤⽤户指定的评分函数在给定的测试数据上返回优化的管道的得分。
export(output_file_name),将优化的管道导出为Python代码。violet
3. TPOT缺点
⽤过grid-arch的同学⼀定知道,在参数⾮常多的情况下,是相当耗时的,由此我们可以看出TPOT问题——耗时。
以下给出解释:
搜索整个管道空间是特别耗时的。认识到原因是必要的,在默认的TPOT参数下(100 generations with 100 population size),TPOT 将在完成前评估1万个管道配置。考虑⼀个⽹格搜索1万个超参数组合⽤于机器学习算法以及⽹格搜索需要多长时间。⽤10倍的交叉验证来评估这1万个模型,这意味着⼤约有10万个模型在⼀个⽹格搜索的训练数据中被匹配和评估。这是⼀个耗时的过程,即使对于像决策树这样的简单模型也是如此。
典型的TPOT运⾏将需要数⼩时到数天才能完成(除⾮是⼀个⼩数据集),但是可以中断运⾏,并看到⽬前为⽌最好的结果。TPOT还提供warm_start参数,可以从中断的地⽅重新启动之前运⾏的TPOT。
亲亲,⾯对这样的问题,这边给出的建议如下:
在做数据挖掘问题,可以尝试在数据清洗之后,抽样⼩部分数据跑⼀下TPOT,得到⼀个baline,效果可能还不错。