网站开发环境与工具,学ps做兼职的网站有哪些,两当网站建设,搜索引擎推广费用机器学习入门系列#xff08;2#xff09;–如何构建一个完整的机器学习项目#xff0c;第七篇#xff01;
该系列的前六篇文章#xff1a;
机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理#…机器学习入门系列2–如何构建一个完整的机器学习项目第七篇
该系列的前六篇文章
机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理上特征工程之数据预处理下特征工程之特征缩放特征编码特征工程(完)
前面六篇文章从一个项目的终极目标、寻找和获取数据到数据预处理做特征工程接下来就需要开始选择合适的算法模型进行训练评估和测试了。
所以接下来会整理下比较常用的机器学习算法的汇总比较包括
线性回归逻辑回归决策树随机森林支持向量机朴素贝叶斯KNN 算法K-均值算法提升方法BoostingGBDT优化算法卷积神经网络
因为篇幅问题主要简单介绍每个算法的基本原理优缺点等以及为了保证每篇文章不会太长可能会分成两篇或者三篇来介绍。 1. 线性回归
简述 定义线性回归Linear Regression是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。 这种函数是一个或多个称为回归系数的模型参数的线性组合自变量都是一次方。只有一个自变量的情况称为简单回归大于一个自变量情况的叫做多元回归。
线性回归的模型函数如下 hθθTxh_\theta \theta ^T x hθθTx
它的损失函数如下 J(θ)12m∑i1m(hθ(x(i))−y(i))2J(\theta) {1\over {2m}} \sum_{i1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ)2m1i1∑m(hθ(x(i))−y(i))2 通过训练数据集寻找参数的最优解即求解可以得到 minJ(θ)minJ(\theta)minJ(θ) 的参数向量 θ\thetaθ ,其中这里的参数向量也可以分为参数 w和bw和bw和b , 分别表示权重和偏置值。
求解最优解的方法有最小二乘法和梯度下降法。
优缺点
优点结果易于理解计算上不复杂。 缺点对非线性数据拟合不好。 适用数据类型数值型和标称型数据。 算法类型回归算法
代码实现
#Import Library
#Import other necessary libraries like pandas, numpy...
from sklearn import linear_model
#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arraysx_traininput_variables_values_training_datasets
y_traintarget_variables_values_training_datasets
x_testinput_variables_values_test_datasets# Create linear regression object
linear linear_model.LinearRegression()# Train the model using the training sets and check score
linear.fit(x_train, y_train)
linear.score(x_train, y_train)#Equation coefficient and Intercept
print(Coefficient: \n, linear.coef_)
print(Intercept: \n, linear.intercept_)#Predict Output
predicted linear.predict(x_test)2. 逻辑回归
简述
Logistic 回归算法基于 Sigmoid 函数或者说 Sigmoid 就是逻辑回归函数。Sigmoid 函数定义如下11e−z\frac{1}{1e^{-z}}1e−z1。函数值域范围(0,1)。
因此逻辑回归函数的表达式如下
hθ(x)g(θTX)11e−θTX其中g(z)11e−zh_\theta(x) g(\theta^T X) \frac{1}{1e^{-\theta^TX}} \\ 其中g(z) \frac{1}{1e^{-z}} hθ(x)g(θTX)1e−θTX1其中g(z)1e−z1
而逻辑回归的代价函数如下所示
J(θ)−1m[∑i1my(i)loghθ(x(i))(1−y(i)log(1−hθ(x(i)))]J(\theta) -\frac{1}{m} [\sum_{i1}^my^{(i)}logh_\theta(x^{(i)})(1-y^{(i)}log(1-h_\theta(x^{(i)}))] J(θ)−m1[i1∑my(i)loghθ(x(i))(1−y(i)log(1−hθ(x(i)))]
可以使用梯度下降算法来求解使得代价函数最小的参数。其梯度下降法公式为 优缺点
优点
实现简单广泛的应用于工业问题上分类时计算量非常小速度很快存储资源低便于观测样本概率分数对逻辑回归而言多重共线性并不是问题它可以结合L2正则化来解决该问题。
缺点
容易欠拟合一般准确度不太高只能处理两分类问题在此基础上衍生出来的softmax可以用于多分类且必须线性可分特征空间很大时逻辑回归的性能不是很好不能很好地处理大量多类特征或变量对于非线性特征需要进行转换。
适用数据类型数值型和标称型数据。 类别分类算法。 试用场景解决二分类问题。
代码实现
#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create logistic regression objectmodel LogisticRegression()# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)#Equation coefficient and Intercept
print(Coefficient: \n, model.coef_)
print(Intercept: \n, model.intercept_)#Predict Output
predicted model.predict(x_test)3. 决策树
简述 定义分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型内部结点和叶结点。内部结点表示一个特征或属性叶结点表示一个类。 决策树学习本质上是从训练数据集中归纳出一组分类规则也可以说是由训练数据集估计条件概率模型。它使用的损失函数通常是正则化的极大似然函数其策略是以损失函数为目标函数的最小化。
决策树学习的算法通常是一个递归地选择最优特征并根据该特征对训练数据进行分割使得对各个子数据集有一个最好的分类的过程。
决策树的生成对应于模型的局部选择决策树的剪枝对应于模型的全局选择。决策树的生成只考虑局部最优相对地决策树的剪枝则考虑全局最优。
决策树学习通常包括3个步骤特征选择、决策树的生成和决策树的修剪。
特征选择
特征选择的准则通常是信息增益或者信息增益比。
信息增益的定义如下图所示 其中 Entropy(S) 表示样例集合 S 的信息熵A 是属性集合信息增益 Gain(S, A) 表示的就是在知道属性 A 后得到的关于目标函数值的信息它越大表示得到的信息越多。
信息增益的缺点是存在偏向于选择取值较多的特征的问题。为了解决这个问题可以使用信息增益比。
因此特征 A 对训练数据集 D 的信息增益比的定义如下
gR(D,A)g(D,A)HA(D)g_R(D, A) \frac{g(D,A)}{H_A(D)} gR(D,A)HA(D)g(D,A)
信息增益比也存在对可取值数目较少的属性有所偏好的问题。
决策树的生成
简单介绍决策树的生成算法包括 ID3C4.5 算法。
ID3
ID3 算法的核心是在决策树各个结点上应用信息增益准则选择特征递归地构建决策树。
ID3 算法的思路如下
首先是针对当前的集合计算每个特征的信息增益然后选择信息增益最大的特征作为当前节点的决策决策特征根据特征不同的类别划分到不同的子节点比如年龄特征有青年中年老年则划分到3颗子树然后继续对子节点进行递归直到所有特征都被划分
ID3 的缺点是
1容易造成过度拟合over fitting 2只能处理标称型数据离散型 3信息增益的计算依赖于特征数目较多的特征而属性取值最多的属性并不一定最优 4抗噪性差训练例子中正例和反例的比例较难控制
C4.5
C4.5算法继承了 ID3 算法的优点并在以下几方面对 ID3 算法进行了改进
用信息增益率来选择属性克服了用信息增益选择属性时偏向选择取值多的属性的不足在树构造过程中进行剪枝能够完成对连续属性的离散化处理能够对不完整数据进行处理。
C4.5算法有如下优点产生的分类规则易于理解准确率较高。
其缺点是
算法低效在构造树的过程中需要对数据集进行多次的顺序扫描和排序因而导致算法的低效**内存受限**只适合于能够驻留于内存的数据集当训练集大得无法在内存容纳时程序无法运行。
实际上由于信息增益比的缺点C4.5 算法并没有直接选择信息增益比最大的候选划分属性而是先从候选划分属性中找出信息增益高于平均水平的属性再从中选择信息增益比最高的。
无论是 ID3 还是 C4.5 最好在小数据集上使用决策树分类一般只适用于小数据。当属性取值很多时最好选择 C4.5 算法ID3 得出的效果会非常差。
剪枝
在生成树的过程中如果没有剪枝的操作的话就会长成每一个叶都是单独的一类的样子。这样对我们的训练集是完全拟合的但是对测试集则是非常不友好的泛化能力不行。因此我们要减掉一些枝叶使得模型泛化能力更强。 根据剪枝所出现的时间点不同分为预剪枝和后剪枝。预剪枝是在决策树的生成过程中进行的后剪枝是在决策树生成之后进行的。
决策树的剪枝往往是通过极小化决策树整体的损失函数或代价函数来实现的。简单来说就是对比剪枝前后整体树的损失函数或者是准确率大小来判断是否需要进行剪枝。
决策树剪枝算法有多种具体参考决策树剪枝算法这篇文章。
优缺点
优点 计算量简单可解释性强比较适合处理有缺失属性值的样本能够处理不相关的特征 效率高决策树只需要一次构建反复使用。 训练时间复杂度较低预测的过程比较快速每一次预测的最大计算次数不超过决策树的深度。对于N个样本每个样本都包含M个属性在不考虑连续属性离散化以及子树增长的代价情况下决策树算法的平均时间复杂度仅为O(M∗N∗logN)O(M*N*logN)O(M∗N∗logN)。构建一个决策树最坏情况下的复杂度是O(treedepth)O(tree depth)O(treedepth)其中树的深度一般呈对数增长。
缺点
单颗决策树分类能力弱并且对连续值变量难以处理容易过拟合后续出现了随机森林减小了过拟合现象可能或陷于局部最小值中没有在线学习
解决决策树的过拟合
1.剪枝
前置剪枝在分裂节点的时候设计比较苛刻的条件如不满足则直接停止分裂这样干决策树无法到最优也无法得到比较好的效果后置剪枝在树建立完之后用单个节点代替子树节点的分类采用子树中主要的分类这种方法比较浪费前面的建立过程 2.交叉验证 3.随机森林
代码实现
#Import Library
#Import other necessary libraries like pandas, numpy...from sklearn import tree
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create tree object
model tree.DecisionTreeClassifier(criteriongini) # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini # model tree.DecisionTreeRegressor() for regression# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)#Predict Output
predicted model.predict(x_test)4. 随机森林
简介 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器。 它是由多棵 CART(Classification And Regression Tree) 构成的。对于每棵树其使用的训练集是从总的训练集中有放回采样出来的这意味着总训练集中有些样本可能多次出现在一棵树的训练集中也可能从未出现在一棵树的训练集中。在训练每棵树的节点时使用的特征是从所有特征中按照一定比例随机地无放回的抽取的假设总的特征数是M,则这个比例可以是 (M),12(M),2(M)\sqrt(M), \frac{1}{2} \sqrt(M), 2\sqrt(M)(M),21(M),2(M)。
优缺点
优点
在数据集上表现良好在当前的很多数据集上相对其他算法有着很大的优势它能够处理很高维度特征很多的数据并且不用做特征选择可以评估特征的重要性在创建随机森林的时候对 generlization error 使用的是无偏估计训练速度快容易做成并行化方法在训练过程中能够检测到特征间的互相影响实现比较简单对于不平衡的数据集来说它可以平衡误差可以应用在特征缺失的数据集上并仍然有不错的性能
缺点
随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟对于有不同取值的属性的数据取值划分较多的属性会对随机森林产生更大的影响所以随机森林在这种数据上产出的属性权值是不可信的。
代码实现
简单使用 sklearn 中随机森林算法的例子
#Import Library
from sklearn.ensemble import RandomForestClassifier
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create Random Forest object
model RandomForestClassifier()# Train the model using the training sets and check score
model.fit(X, y)#Predict Output
predicted model.predict(x_test)小结
简单介绍了前四种算法线性回归、逻辑回归、决策树以及随机森林其中后三种算法都比较常用特别是逻辑回归算法特别常用在很多算法比赛中都会考虑先实现一个逻辑回归算法来跑通整个算法流程再考虑替换根据复杂的算法模型。而随机森林算是决策树的升级版性能更好而且它还能用于评估特征的重要性可以做特征选择属于三大特征选择方法中的最后一种嵌入式选择方法学习器会自动选择特征。 参考
《统计学习方法》各种回归全解传统回归、逻辑回归、加权回归/核回归、岭回归、广义线性模型/指数族决策树剪枝算法决策树系列五——CARTRandomForest随机森林总结机器学习常见算法个人总结面试用 欢迎关注我的微信公众号–机器学习与计算机视觉或者扫描下方的二维码大家一起交流学习和进步