程序测试是展现BUG存在的有效方式,但令人绝望的是它不足以展现其缺位。
——艾兹格·迪杰斯特拉(Edsger W. Dijkstra)
算法审查时选择合适的机器学习算法主要方式之一。审查算法前并不知道哪个算法对问题最有效,必须设计一定的实验进行验证,以找到对问题最有效的算法。
审查算法前没有办法判断那个算法对数据集最有效、能够生成最优模型,必须通过一些列的实验进行验证才能够得出结论,从而选择最优的算法。这个过程被称为审查算法。
审查算法时,要尝试多种代表性算法、机器学习算法以及多种模型,通过大量实验才能找到最有效的算法。
1.审查分类算法
1.1线性算法审查
1.1.1逻辑回归
逻辑回归其实是一个分类算法而不是回归算法,通常是利用已知的自变量来预测一个离散型因变量的值(如二进制0/1、真/假)。简单来说,它就是通过拟合一个逻辑回归函数(Logistic Function)来预测事件发生的概率。所以它预测的是一个概率值,它的本文来源[email protected]搞@^&代*@码)网9输出值应该为0~1,因此非常适合二分类问题。
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression#逻辑回归 filename = 'pima_data.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, shuffle=True) model = LogisticRegression(max_iter=3000) result = cross_val_score(model, X, Y, cv=kfold) print(result.mean())
执行结果如下:
0.7721633629528366
1.1.2线性判别分析
线性判别分析(Linear DIscriminant Analysis,LDA),也叫做Fisher线性判别(Fisher Linear Discriminant Analysis,FLD)。它的思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大类间距离和最小类内距离。因此,他是一种有效的特征抽取方法。(完全不懂它是什么东西。。。)
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis #相同代码不再赘述 #线性判别分析 model = LinearDiscriminantAnalysis() result = cross_val_score(model, X, Y, cv=kfold) print(result.mean())