使用TPOT自动选择scikit-learn机器学习模型和参数

声明:原文地址:使用TPOT自动选择scikit-learn机器学习模型和参数,此文是本人学习原文的结果,略有改动。侵删。

在上一篇博客中我们在anacoda中安装了tpot: anacoda下安装TPOT库。有需要的可以去看一下。

正文:

scikit-learn是抽象层次很高的机器学习库,它提供了许多机器学习模型,而每个模型还有很多参数。那么问题来了,我们该怎么选择某个问题最适合使用哪个模型呢?

当然,我们一个一个尝试,或使用TPOT自动化这个过程。TPOT是基于遗传算法自动选择、优化机器学习模型和参数的工具。遗传算法常来解决优化和搜索问题,本博客就使用例子介绍一下TPOT的使用。

数据集地址:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/

使用的数据集breast-cancer-wisconsin.data

打开以后是这个样子:


这个东西没有列名,很难受。我直接把它全选复制到txt中,然后直接改文件后缀为csv,把文件转换为csv格式。我们给他加上

属性名如下:



好了,开始写程序:

#-*- coding: UTF-8 -*-
'''
使用TPOT自动选择scikit-learn机器学习模型和参数
'''
import numpy as np
import pandas as pd
from sklearn import model_selection
from sklearn.ensemble import RandomForestClassifier
from tpot import TPOTClassifier

inputfile='G:\PythonCode\PycharmProjects\data\\breast-cancer-wisconsin.data.csv'

def main():
    df=pd.read_csv(inputfile)
    #print(df.head())
    df.replace('?',np.nan,inplace=True)
    df.dropna(inplace=True)
    df.drop(['id'],1,inplace=True)
    #print(df.head())
    X=np.array(df.drop(['Class'],1))
    Y=np.array(df['Class'])
    x_train,x_test,y_train,y_test=model_selection.train_test_split(X,Y,test_size=0.2)
    tpot=TPOTClassifier(generations=6,verbosity=2)
    tpot.fit(x_train,y_train)
    tpot.score(x_test,y_test)
    tpot.export('pipeline.py')


if __name__ == "__main__":
    main()

程序运行结果如下:


Best pipeline: RandomForestClassifier(input_matrix, bootstrap=True, criterion=entropy, max_features=0.05, min_samples_leaf=3, min_samples_split=16, n_estimators=100)

可以看到我们运行的最优结果是随机森林。

下面我们跑一下随机森林:

#-*- coding: UTF-8 -*-
'''
使用TPOT自动选择scikit-learn机器学习模型和参数
'''
import numpy as np
import pandas as pd
from sklearn import model_selection
from sklearn.ensemble import RandomForestClassifier
from tpot import TPOTClassifier

inputfile='G:\PythonCode\PycharmProjects\data\\breast-cancer-wisconsin.data.csv'

def main():
    df=pd.read_csv(inputfile)
    #print(df.head())
    df.replace('?',np.nan,inplace=True)
    df.dropna(inplace=True)
    df.drop(['id'],1,inplace=True)
    #print(df.head())
    X=np.array(df.drop(['Class'],1))
    Y=np.array(df['Class'])
    x_train,x_test,y_train,y_test=model_selection.train_test_split(X,Y,test_size=0.2)
    # tpot=TPOTClassifier(generations=6,verbosity=2)
    # tpot.fit(x_train,y_train)
    # tpot.score(x_test,y_test)
    # tpot.export('pipeline.py')

    rfc=RandomForestClassifier(bootstrap=True, criterion='entropy', max_features=0.05, min_samples_leaf=3, min_samples_split=16, n_estimators=100)
    rfc.fit(x_train,y_train)
    accuracy=rfc.score(x_test,y_test)
    print("accuracy:%s"%accuracy)


if __name__ == "__main__":
    main()
程序运行结果:


可以看出这个tpot还是挺有用的,可以直接输出模型和参数,比较省事儿。

参考:

一个自动化解决数据科学问题的python工具

tpot示例

tpot的GitHub地址







猜你喜欢

转载自blog.csdn.net/tony_stark_wang/article/details/79858905
今日推荐