机器学习中的分类模型整理

您所在的位置:网站首页 数据整理的方法有哪些 机器学习中的分类模型整理

机器学习中的分类模型整理

2024-07-11 22:19| 来源: 网络整理| 查看: 265

概要

机器学习中的分类模型有逻辑回归、朴素贝叶斯、决策树、支持向量机、随机森林、梯度提升树等分类算法,不仅可以进行二分类,还可以进行多分类。

一、逻辑回归

逻辑回归的本质就由线性回归演变而来,是一个线性分类器。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的概率输出。

持续更新。。。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3