机器学习中的分类模型整理
概要
机器学习中的分类模型有逻辑回归、朴素贝叶斯、决策树、支持向量机、随机森林、梯度提升树等分类算法,不仅可以进行二分类,还可以进行多分类。
一、逻辑回归
逻辑回归的本质就由线性回归演变而来,是一个线性分类器。sklearn实现的LogisticRegression不仅可用于二分类,也可以用于多分类。
优点:
- 模型训练速度非常快,计算量只与特征的数目有关。
- 模型的可解释性非常好,从特征的权重可以看到不同特征对最后结果的影响。
- 内存资源占用小,只需要存储特征权重等信息。
- 逻辑回归的抗噪能力比较强。
缺点:
- 若数据集是非线性的,逻辑回归并不能得到很好的结果。
- 逻辑回归对极不平衡的数据集训练效果不好。
- 逻辑回归对数据特征的分布和相关性要求相对较高。
- 逻辑回归本身无法筛选特征。
# 一般的训练模型代码
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression as LR
# data是dataframe对象数据,取特征与标签
X = data.iloc[:,1:]
y = data.iloc[:,0]# 使用交叉验证大概看一下模型效果。
lr_ = LR()
score_ = cross_val_score(lr_, X, y, cv=10).mean()
score_# 使用学习曲线进行调参,此方法适合训练时间比较长的模型
# 逻辑回归中主要几个需要调的参数:penalty;C;solver。
l1 = []
l2 = []
C = np.arange(0.1, 20.1, 0.5) #
for i in C:lrl1 = LR(penalty='l1', solver='liblinear', C=i, max_iter=1000).fit(X_train, Y_train)l1.append(lrl1.score(X_vali, Y_vali))lrl2 = LR(penalty='l2', solver='liblinear', C=i, max_iter=1000).fit(X_train, Y_train)l2.append(lrl2.score(X_vali, Y_vali))print(max(l1), C[l1.index(max(l1))])
print(max(l2), C[l2.index(max(l2))])
plt.figure(figsize=(20,5))
plt.plot(C, l1, label='l1')
plt.plot(C, l2, label='l2')
plt.legend(loc=4)
plt.show()# 还可以使用网格搜索调参
# 网格搜索进行调参
from sklearn.model_selection import GridSearchCV
parameters = {'C':[*np.linspace(0.1,1,5)],'solver':('liblinear','saga','newton-cg','lbfgs', 'sag')
# ,'max_iter':[100,150,200]
}
lr = LR(penalty='l2', C=0.1, solver='liblinear')
gs = GridSearchCV(lr, parameters, cv=10)
gs.fit(X_train, Y_train)
print("best params:", gs.best_params_)
print("best score:", gs.best_score_)
具体接口参见官方文档
二、决策树
决策树是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规 则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。
优点:
- 对数据不太敏感,无需做数据预处理。比如归一化、标准化。
- 决策树模型可以进行可视化分析,便于理解和解释
- 训练速度快
缺点:
- 容易发生过拟合
- 泛化能力比较差
- 容易忽略数据中特征的相关性
# 决策分类树模型训练
from sklearn import tree
clf = tree.DecisionTreeClassifier(criterion='entropy', random_state=1, splitter='random')
clf.fit(X_train, Y_train)
clf.score(X_vali, Y_vali)
# 调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
决策树可调的参数比较多,criterion(衡量分枝质量的指标)、splitter(分枝策略)、max_depth(树的最大深度)、max_features(做最佳分枝时考虑特征的个数)等等,具体接口参见官方文档
三、支持向量机
支持向量机是一种典型的二分类模型。
优点:
- SVM利用内积核函数代替向高维空间的非线性映射。
- SVM分类决策是由少数的支持向量决定的。计算复杂性取决于支持向量的数目。
缺点:
- SVM并不适合大规模训练样本
- SVM不能用于多分类问题
- 对于分类结果有"概率"值要求的不适用
# 支持向量机 SVM
from sklearn.svm import SVC
clf = SVC(kernel='linear',gamma='auto',degree=1,cache_size=5000).fit(X_train, Y_train)
clf.score(X_vali, Y_vali)
# 调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
具体接口参加官方文档
四、随机森林
随机森林是一个集成算法分类器,其所有的基分类器都是决策树,然后通过装袋法(Bagging)进行集成。
优点:
- 可用于处理高维度的数据,并且不需要做特征选择
- 训练模型后可以知道哪些特征比较重要
- 对不平衡数据比较不敏感
缺点:
- 当数据集中有特征数据噪声比较大时,容易出现过拟合。
- 无法知道模型内部的运行,可解释性较差。
# 随机森林分类器
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(X_train, Y_train)
rfc.score(X_test, Y_test)
# 调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
具体接口参见官方文档
五、XGBoost模型
XGBoost模型是一种使用提升法(Boosting)集成的集成分类器,利用许多弱分类器集成在一起形成一个强分类器的模型。
优点:
- 当样本存在缺失值时,XGBoost能自动学习分裂方向。
- XGBoost借鉴RF的做法,支持列抽样,不仅能防止过拟合,还能降低计算。
- XGBoost的代价函数引入正则化,控制了模型的复杂度,防止模型过拟合。
缺点:
- XGBoost在迭代之前需要对特征做预排序,大数据集下计算耗时。
- XGBoost采用level-wise算法生成决策树,同时分裂同一层的叶子,这样导致很多不必要分裂叶子节点被分裂,带来了不必要的开销。
# XGBoost模型
from xgboost import XGBRegressor as XGBR
reg = XGBR(n_estimators=100).fit(X_train,Y_train)
reg.score(X_test,Y_test)# 调参方法与前面模型一致。
具体接口参见官方文档
六、LightGBM模型
LightGBM模型也是一种使用提升法(Boosting)集成的集成分类器,利用弱分类器(决策树)迭代训练以得到最优模型。
LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。
优点:
- 训练速度快。相对XGBoost,采用直方图算法进行样本遍历,极大降低了时间复杂度;训练过程中,采用单边梯度算法过滤梯度小的样本,减少了大量的计算;基于leaf-wise算法的增长策略构建树,减少了很多不必要的计算;同时采用了并行(特征并行、数据并行)的方式加速计算,优化了缓存,增加了缓存命中率。
- 内存消耗更小。
缺点:
- 使用leaf-wise算法可能会长出比较深的决策树,而产生过拟合。
- 由于LightGBM是基于偏差的算法,所以对噪点数据比较敏感。
# LightGBM模型
from lightgbm import LGBMClassifier
# lightgbm除了有分类器还有回归模型
gbm = LGBMClassifier(num_leaves=31, learning_rate=0.05, n_estimators=20)
gbm.fit(X_train, Y_train, eval_set=[(X_test, Y_test)], early_stopping_rounds=5)# 网格搜索,参数优化
estimator = LGBMClassifier(num_leaves=31)
params = {'learning_rate': [0.01, 0.1, 1],'n_estimators': [20, 40]
}
gbm = GridSearchCV(estimator, params)
gbm.fit(X_train, Y_train)
print('Best parameters:', gbm.best_params_)
具体接口参见官方文档
七、朴素贝叶斯分类器
朴素贝叶斯分类器的本质是贝叶斯定理。其有个前提假设(属性条件独立),常用于文本分类。
优点:
- 对于特征独立的情况下,分类效果非常好。
- 对样本量的要求不高
缺点:
- 模型得出的概率没有实际意义
- 不适用数据中特征相关的分类
# 高斯朴素贝叶斯模型
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb.fit(X_train, Y_train)
还有其他类型的贝叶斯模型,具体参见官方文档
官方原话:
On the flip side, although naive Bayes is known as a decent classifier, it is known to be a bad estimator, so the probability outputs from predict_proba are not to be taken too seriously.[翻译] 另一方面,尽管朴素贝叶斯分类器被认为是一个不错的分类器,但它是一个糟糕的估计器,因此不必太认真地对待来自predict_proba的概率输出。
持续更新。。。
机器学习中的分类模型整理相关推荐
- 机器学习中多分类模型的评估方法之--kappa系数
引言 分类是机器学习中监督学习的一种重要应用,基于统计的机器学习方法可以使用SVM进行二分类,可以使用决策书,梯度提升树等进行多分类. 对于二分类模型,我们通常可以使用ROC曲线来评估模型的预测效果. ...
- 机器学习中的生成式模型VS判别式模型,分类,特点
机器学习中的生成式模型VS判别式模型,分类,特点 提示: 本文将从生成式模型与判别式模型的概念, 适用环境 具体模型 三个方面分析比较这两个模型, 并在最后对列出模型范例,进行范例比较. 基础知识: ...
- 机器学习中激活函数和模型_探索机器学习中的激活和丢失功能
机器学习中激活函数和模型 In this post, we're going to discuss the most widely-used activation and loss functions ...
- 炼数成金数据分析课程---16、机器学习中的分类算法(交叉内容,后面要重点看)...
炼数成金数据分析课程---16.机器学习中的分类算法(交叉内容,后面要重点看) 一.总结 一句话总结: 大纲+实例快速学习法 主要讲解常用分类算法(如Knn.决策树.贝叶斯分类器等)的原理及pytho ...
- 机器学习中的分类算法
机器学习中的分类算法 机器学习,模式识别中很重要的一环,就是分类,因为计算机其实无法深层次地理解文字图片目标的意思,只能回答是或者不是.当然现在卷积神经网络正在希望计算机能够看懂东西,这次我们先来看一 ...
- 机器学习中训练的模型,通俗理解
概率统计(建模.学习) 很多新手在初学机器学习/深度学习中,会产生这样的疑问?为什么要训练模型,模型是什么,如何训练- 本人刚开始接触时也产生过类似地疑问,现在为大家排解这些疑问. 1.机器学习中大概 ...
- 机器学习中如何评价模型的好坏
机器学习中如何评价模型的好坏 Week 2 主要学习机器学习中的基础知识 Targets for this week: 数据拆分:训练数据集&测试数据集 评价分类结果:精准度.混淆矩阵.精准率 ...
- 机器学习中的判别式模型和生成式模型
首发于人工智能 写文章 机器学习中的判别式模型和生成式模型 Microstrong 微信公众号:Microstrong,人工智能算法工程师 已关注 78 人赞同了该文章 目录: 基本概念 用例子说明概 ...
- ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现
ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现 目录 机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现 代码实现
最新文章
- 分享10个实用的高效办公神器,极大地提高办公效率
- GNOME桌面的安装
- mysql和mybatis优化_MySQL + mybatis的SQL优化方案
- 数据结构和算法设计专题之---判断单链表中是否有环,环的长度,环的入口节点...
- 九、Docker快速搭建Elastic Stack(上篇)
- 计算机组成原理基于mips结构pdf,计算机组成原理_L12-MIPS系统结构-V1.pdf
- android studio打包纯H5项目(集成5+SDK)
- 淘宝数据分析工具汇总
- 4、第4次课 CSS代码第三节课20150923
- Atitit 数据库对比较 oracle mysql pgsql 目录 1.1. 跨机器跨库mysql vs pgsql	1 1.2. 动态增加列 pgzhichi	1 1.3. Cte	1 1.4
- python hog特征提取,直接从原始图像的HoG特征提取编辑图像的HoG特征
- 基于深度学习的帧内预测技术
- 入侵网页html服务器,Web渗透入侵思路(脑图)| 内附彩蛋
- WMB专题之ESQL
- WINCE 矩阵键盘 介绍
- idea创建SSM项目(Spring+SpringMVC+MyBatis)
- uni-app - ios禁止页面滑动(无法上下滚动屏幕页面)
- 程序员,你的薪资和劳动价值成正比吗?
- Android图灵聊天机器人-薇尔莉特
- renpy 对话框的人物头像缩放处理