机器学习常用算法
1.线性回归
在统计学和机器学习领域,线性回归可能是最广为人知也最易理解的算法之一。
定义:
线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。
优点:
结果易于理解,计算上不复杂。
缺点:
对非线性数据拟合不好。
适用数据类型:
数值型和标称型数据。
用法:
from sklear.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(x_train,y_train)
lr.score(x_train,y_train)
print("系数: ",lr.coef_)
print("截距: ",lr.intercept_)
y_pred = lr.predict(x_test)
线性回归最小二乘估计公式:
L(W) = …
在使用最小二乘估计的时候 有时由于数据维度比样本个数还要多,所以矩阵是不可逆的 这时就无法使用最小二乘估计了,这种现象称为过拟合
解决过拟合的方法有: 加样本数据 降维(特征选择/特征提取) 正则化
2.Logistic 回归(逻辑回归)
Logistic 回归是机器学习从统计学领域借鉴过来的另一种技术。它是二分类问题的首选方法。
优点:
- 实现简单,广泛的应用于工业问题上;
- 分类时计算量非常小,速度很快,存储资源低;
- 便于观测样本概率分数
- 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题。
缺点:
- 容易欠拟合,一般准确度不太高
- 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;
- 特征空间很大时,逻辑回归的性能不是很好;
- 不能很好地处理大量多类特征或变量
- 对于非线性特征,需要进行转换。
适用数据类型:
数值型和标称型数据。
使用场景:
二分问题
用法:
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(x,y)
lr.score(x,y)
print("系数: ",lr.coef_)
print("截距: ",lr.intercept_)
y_pred = lr.predict(x_test)
3.决策树
定义:
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。
优点:
- 计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;
- 效率高,决策树只需要一次构建,反复使用。
- 训练时间复杂度较低,预测的过程比较快速,每一次预测的最大计算次数不超过决策树的深度。树的深度一般呈对数增长。
缺点:
- 单颗决策树分类能力弱,并且对连续值变量难以处理;
- 容易过拟合(后续出现了随机森林,减小了过拟合现象);
- 可能或陷于局部最小值中
- 没有在线学习
解决决策树的过拟合方法:
剪枝
- 前置剪枝:在分裂节点的时候设计比较苛刻的条件,如不满足则直接停止分裂(这样干决策树无法到最优,也无法得到比较好的效果)
- 后置剪枝:在树建立完之后,用单个节点代替子树,节点的分类采用子树中主要的分类(这种方法比较浪费前面的建立过程)
交叉验证
随机森林
用法:
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier(criterion='gini')
dtc.fit(x,y)
dtc.score(x,y)
y_pred = dtc.predict(x_test)
4.随机森林
随机森林指的是利用多棵树对样本进行训练并预测的一种分类器。
优点:
- 在数据集上表现良好,在当前的很多数据集上,相对其他算法有着很大的优势
- 它能够处理很高维度(特征很多)的数据,并且不用做特征选择
- 可以评估特征的重要性
- 在创建随机森林的时候,对 generlization error 使用的是无偏估计
- 训练速度快,容易做成并行化方法
- 在训练过程中,能够检测到特征间的互相影响
- 实现比较简单
- 对于不平衡的数据集来说,它可以平衡误差。
- 可以应用在特征缺失的数据集上,并仍然有不错的性能
缺点
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
用法 :
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor()
rfr.fit(x_train,y_train)
rfr.score(x_train,y_train)
y_pred = rfr.predict(x_test)