算法比较和自动流程

1.算法比较
比较不同算法的准确度,选择合适的算法,在处理机器学习的问题时是非常重要的。
a.如何设计一个实验来比较不同的机器学习算法
b.一个可以重复利用的,用来评估算法性能的模板
c.如何可视化算法的比较结果

1.1选择最佳的机器学习算法
每种模型都有各自适合处理的数据特征,通过交叉验证等抽样验证方式可以得到每种模型的准确度,并选择合适的算法。通过这种评估方式,可以找到一种或两种最适合问题的算法。当得到一个新的数据集时,应该通过不同的维度来审查数据,以便于找到数据的特征,这种方法也适用于选择算法模型。同样需要从不同的维度,用不同的方法来观察机器学习算法的准确度,并从中选择一种或两种对问题最有效的算法。一种比较好的方法是通过可视化的方式来展示平均准确度,方差等属性,以便于更方便地选择算法。

1.2机器学习算法的比较
最合适的算法比较方法是:使用相同的数据,相同的方法来评估不同的算法,以便得到一个准确的结果。下面使用一个数据集来比较六种分类算法,以便选择合适的算法来解决问题。
a.逻辑回归
b.线性判别分析
c.K近邻
d.CART回归树
e.贝叶斯分类器
f.支持向量机

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.linear_model import LogisticRegression
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import GaussianNB
from matplotlib import pyplot
#导入数据
filename = '/home/hadoop/DataSet/pima indians.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(filename,names=names)
#将数据分为输入数据和输出结果
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,random_state=seed)
models = {}#字典
models['LR'] = LogisticRegression()
models['LDA'] = LinearDiscriminantAnalysis()
models['KNN'] = KNeighborsClassifier()
models['CART'] = DecisionTreeClassifier()
models['SVM'] = SVC()
models['NB'] = GaussianNB()
results = []#列表
for name in models:
   result = cross_val_score(models[name],X,Y,cv=kfold)
   results.append(result)
   msg = '%s:%.3f(%.3f)'%(name,result.mean(),result.std())
   print(msg)
#图标显示
fig = pyplot.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(models.keys())
pyplot.show()

2.自动流程
a.如何通过Pipeline来最小化数据缺失
b.如何构建数据准备和生成模型的Pipeline
c.如何构建特征选择和生成模型的Pipeline

2.1机器学习的自动流程
在机器学习方面有一些可以采用的标准化流程,这些标准化流程是从共同的问题中提炼出来的,例如评估框架中的数据缺失等。Pipeline能够将从数据转换到评估模型的整个机器学习流程进行自动化处理。

2.2数据准备和生成模型的Pipeline
在机器学习的实践中有一个常见的错误,就是训练数据集与评估数据集之间的数据泄露,这会影响到评估的准确度。要想避免这个问题,需要有一个合适的方式把数据分离成训练数据集和评估数据集,这个过程被包含在数据的准备过程中。数据准备过程是很好的理解数据和算法关系的过程,举例来说,当对训练数据集做标准化和正态化处理来训练算法时,就应该理解并接受这同样要受评估数据集的影响。
Pipeline能够处理训练数据集与评估数据集之间的数据泄露问题,通常会在数据处理过程中对分离出的所有数据子集做同样的数据处理,如正态化处理。步骤如下:
a.正态化数据
b.训练一个线性判别分析模型

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
#导入数据
filename = '/home/hadoop/DataSet/pima indians.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(filename,names=names)
#将数据分为输入数据和输出结果
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,random_state=seed)
steps = []#列表添加元组
steps.append(('Standardize',StandardScaler()))
steps.append(('lda',LinearDiscriminantAnalysis()))
model = Pipeline(steps)#生成Pipeline
result = cross_val_score(model,X,Y,cv=kfold)
print(result.mean())

2.3特征选择和生成模型的Pipeline
特征选择也是一个容易受到数据泄露影响的过程。和数据准备一样,特征选择时也必须保证数据的稳固性,Pipeline也提供了一个工具(FeatureUnion)来保证数据特征选择时数据的稳固性。一个在数据选择过程中保持数据稳固性的过程包括以下四个步骤:
a.通过主要成分分析进行特征选择
b.通过统计选择进行特征选择
c.特征集合
d.生成一个逻辑回归模型

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import FeatureUnion
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest
#导入数据
filename = '/home/hadoop/DataSet/pima indians.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(filename,names=names)
#将数据分为输入数据和输出结果
array = data.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
seed = 7
kfold = KFold(n_splits=num_folds,random_state=seed)
#生成FeatureUnion
features = []
features.append(('pca',PCA()))
features.append(('select_best',SelectKBest(k=6)))
#生成Pipeline
steps = []
steps.append(('feature_union',FeatureUnion(features)))
steps.append(('logistic',LogisticRegression()))
model = Pipeline(steps)
result = cross_val_score(model,X,Y,cv=kfold)
print(result.mean())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值