模型的选择与评估
划分数据集
from sklearn.model_selection import StratifiedShuffleSplit
评估模型
用于计算真实值与预测值之间的预测误差
from sklearn.metrics import accuracy_score, log_loss
_score结尾的函数,返回值越大,效果越好;_loss结尾的函数,返回值越小,效果越好。
监督学习
最近邻
最近邻 不仅可以用于分类,也可以用于回归
from sklearn import neighbors as nn
# 'algorithm' 来控制, 并必须是 ['auto', 'ball_tree', 'kd_tree', 'brute'] 其中的一个。
# 当设置为默认值 'auto' 时,算法会尝试从训练数据中确定最佳方法。
model = nn.NearestNeighbors() # 无监督最近邻
model = nn.KNeighborsClassifier() # 最近邻分类:基于每个查询点的 k 个最近邻实现,其中 k 是用户指定的整数
model = nn.RadiusNeighborsClassifier() # 最近邻分类:基于每个查询点的固定半径 r 内的邻居数量实现, 其中 r 是用户指定的浮点数值。
model = nn.KNeighborsRegressor() # 最近邻回归:基于每个查询点的 k 个最近邻实现,其中 k 是用户指定的整数
model = nn.RadiusNeighborsRegressor() # 最近邻回归:基于每个查询点的固定半径 r 内的邻居数量实现, 其中 r 是用户指定的浮点数值。
支持向量机(SVM)
支持向量机不仅可以用于回归分析(SVR),也可以用于分类(SVC),也可以用于模式识别和异常检测。
from sklearn import svm
# SVM 主要针对的是多分类
# 核函数kernel:参数选择有RBF, Linear, Poly, Sigmoid, 默认的是"RBF";
model=svm.LinearSVC() # 线性核函数(one-vs-rest)的支持向量分类
model=svm.NuSVC()# 核函数可选择(one-vs-one)的核支持向量分类
model=svm.SVC () # 核函数可选择(one-vs-one)的支持向量分类
model=svm.LinearSVR()# 线性核函数的支持向量回归
model=svm.NuSVR() # 核函数可选择(one-vs-one)的核支持向量回归
model=svm.SVR () # 核函数可选择的支持向量分类回归
model=svm.OneClassSVM() # 一个用于离群点检测的单类SVM
决策树
from sklearn.tree import DecisionTreeClassifier
决策树用于做分类
集成方法
集成方法不仅可以用于回归,也可以用于分类
from sklearn import ensemble as esm
# 分类
model = esm.BaggingClassifier() # 平均方法:Bagging 元估计器
model = esm.RandomForestClassifier() # 平均方法:随机森林
model = esm.AdaBoostClassifier() # boosting方法:AdaBoost
model = esm.GradientBoostingClassifier() # boosting方法:梯度提升树(既支持二分类又支持多分类)
model = esm.VotingClassifier() # 投票分类器
# 回归
model = esm.BaggingRegressor() # Bagging 元估计器
model = esm.RandomForestRegressor() # 随机森林
model = esm.AdaBoostRegressor() # AdaBoost
model = esm.GradientBoostingRegressor() # 梯度提升数
model = esm.VotingRegressor() # 投票回归器
集成方法分为两种 平均方法和boosting方法
-
平均方法,该方法的原理是构建多个独立的估计器,然后取它们的预测结果的平均。一般来说组合之后的估计器是会比单个估计器要好的,因为它的方差减小了。eg: Bagging 方法 , 随机森林 , …
-
boosting 方法中,基估计器是依次构建的,并且每一个基估计器都尝试去减少组合估计器的偏差。这种方法主要目的是为了结合多个弱模型,使集成的模型更加强大。eg: AdaBoost , 梯度提升树 ,
朴素贝叶斯
朴素贝叶斯属于生成方法,其他的属于判别方法。朴素贝叶斯仅用于分类
from sklearn import naive_bayes as nb
model=nb.GaussianNB() # 高斯朴素贝叶斯
model=nb.MultinomialNB() # 多项式分布朴素贝叶斯
model=nb.ComplementNB() # 补充朴素贝叶斯
model=nb.BernoulliNB() # 伯努利朴素贝叶斯
线性回归
仅用于回归
from sklearn import linear_model as lm
model = lm.LinearRegression() # 普通线性回归
model = lm.ridge_regression() # 岭回归
model = lm.RidgeCV() # 交叉验证法的岭回归
model = lm.Lasso() # Lasso回归
model = lm.LassoCV() # 基于交叉验证算法的Lasso回归
model = lm.LassoLars() # 基于最小角回归算法的lasso回归 (适用于样本数量比特征数量少的多的情况)
model = lm.LassoLarsCV() # 基于交叉验证 最小角回归算法的lasso回归 (适用于样本数量比特征数量少的多的情况)
model = lm.ElasticNet() # 弹性网络
model = lm.LogisticRegression() # 解决二分类(0 or 1)问题的分类方法
# 多任务Lasso及多任务弹性网络
model = lm.MultiTaskLasso() # 采用了坐标下降法求解参数。
model = lm.MultiTaskLassoCV() # 通过交叉验证来设置参数
model = lm.MultiTaskElasticNet() # 采用了坐标下降法求解参数。
model = lm.MultiTaskElasticNetCV() # 通过交叉验证来设置参数
随机梯度下降
适用于分类 ,也适用于回归。
from sklearn import linear_model as lm
# `在拟合模型前,确保重新排列了(打乱)训练数据,或者使用 shuffle=True 在每次迭代后打乱训练数据。`
model = lm.SGDClassifier() # one-vs-rest分类
model = lm.SGDRegressor() # 非常适用于有大量训练样本(>10.000)的回归问题,
判别分析
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis
判别分析主要包括两类:线性判别分析 LinearDiscriminantAnalysis和非线性判别分析QuadraticDiscriminantAnalysis