自动化机器学习TPOT及其python实例

自动化机器学习TPOT及其python实例

自动化机器学习,顾名思义就是输入为整理好的一个数据文件,告知特征和目标。利用该工具可以自动生成模型,实现分类或回归的预测任务。同时还能导出选用的代码管道,以供继续优化和学习。
TPOT将通过智能地探索数千种可能的管道来自动化机器学习中最乏味的部分,从而找到最适合您数据的管道。
TPOT建立在scikit-learn之上,
使用TPOT(版本0.9.5)开发模型需要把握以下几点:
在使用TPOT进行建模前需要对数据进行必要的清洗和特征工程操作。
TPOT目前只能做有监督学习。
TPOT目前支持的分类器主要有贝叶斯、决策树、集成树、SVM、KNN、线性模型、xgboost。
TPOT目前支持的回归器主要有决策树、集成树、线性模型、xgboost。
TPOT会对输入的数据做进一步处理操作,例如二值化、聚类、降维、标准化、正则化、独热编码操作等。
根据模型效果,TPOT会对输入特征做特征选择操作,包括基于树模型、基于方差、基于F-值的百分比。

#使用TPOT自动机器学习工具对MNIST进行分类
from tpot import TPOTClassifier ,TPOTRegressor
from sklearn.datasets import load_digits  
from sklearn.model_selection import train_test_split
import numpy as np
# 加载数据
digits = load_digits()    #加载minist数据集
data = digits.data
print(digits.target)
X_train, X_test, y_train, y_test = train_test_split(digits.data.astype(np.float64),digits.target.astype(np.float64), train_size=0.75, test_size=0.25)

tpot = TPOTClassifier(generations=5, population_size=20, verbosity=2)  #定义自动机器学习类
"""python
generations:
运行管道优化过程的迭代次数
population_size:
在遗传进化中每一代要保留的个体数量
verbosity:
How much information TPOT communicates while it's running.
0 = none, 1 = minimal, 2 = high, 3 = all.
A setting of 2 or higher will add a progress bar during the optimization procedure.
"""
tpot.fit(X_train, y_train)
print(tpot.score(X_test, y_test))
tpot.export('tpot_mnist_pipeline.py')

可以通过export()方法把训练过程汇出为形式为sklearn pipeline的.py文件
生成的文件为:(该生成的文件即为上面代码对于该数据集,寻找到的最优模型及其参数)
生辰的代码,需要适当修改。

import numpy as np
import pandas as pd
from sklearn.feature_selection import SelectFwe, f_classif
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.pipeline import make_pipeline

# NOTE: Make sure that the outcome column is labeled 'target' in the data file
tpot_data = pd.read_csv('PATH/TO/DATA/FILE', sep='COLUMN_SEPARATOR', dtype=np.float64)
features = tpot_data.drop('target', axis=1)
training_features, testing_features, training_target, testing_target = \
            train_test_split(features, tpot_data['target'], random_state=None)

# Average CV score on the training set was: 0.9762412226352748
exported_pipeline = make_pipeline(
    SelectFwe(score_func=f_classif, alpha=0.009000000000000001),
    MLPClassifier(alpha=0.0001, learning_rate_init=0.01)
)

exported_pipeline.fit(training_features, training_target)
results = exported_pipeline.predict(testing_features)

在生成的文件中,含有make_pipeline类。大多数机器学习应用不仅需要应用单个算法,而且还需要将许多不同的处理步骤和机器学习模型链接在一起,例如对数据进行缩放,然后手动合并特征,再利用无监督学习来学习特征。为了简化构建变换和模型链的过程,Scikit-Learn提供了pipeline类,可以将多个处理步骤合并为单个Scikit-Learn估计器。pipeline类本身具有fit、predict和score方法,其行为与Scikit-Learn中的其他模型相同。

你可能感兴趣的:(机器学习,机器学习)