
?在不同的场景如何选取不同的算法总是困扰着我,请教过许多机器学习无奈的龙猫,最终结论为,如果时间允许,最好每种算法都尝试一下,选择效果最好的算法应用到对应的场景。
下面代码选取了五种主流机器学习算法,包括SVM、KNN、决策树、逻辑回归、朴素贝叶斯,当然也包括集成学习算法,Bagging、Adaboost、GBDT和随机森林。编写一个通用函数分别构建上述模型,并作出ROC曲线进行模型评估。
以下为测试数据下载地址,提取码为:lg9r
https://pan.baidu.com/s/1e8txYy-PZrwKKP3JD4sJAg
?
#!/usr/明理的书本/env python# -*- coding: utf-8 -*-__author__ = \’Seven\’import pandas as pd# 导入集成学习算法from sklearn.ensemble import BaggingClassifier, AdaBoostClassifier, GradientBoostingClassifier, RandomForestClassifier# 导入普通模型算法from sklearn.svm import SVCfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.naive_bayes import GaussianNBfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.linear_model import LogisticRegression# 导入模型评估库from sklearn.metrics import roc_curve, auc# 导入数据拆分库from sklearn.model_selection import train_test_split# 导入归一化库from sklearn.preprocessing import MinMaxScaler# 导入可视化库import matplotlib.pyplot as plt# 设置中文显示plt.rcParams[\’font.sans-serif\’] = [\’SimHei\’]plt.rcParams[\’axes.unicode_minus\’] = False# 去除警告信息import warningswarnings.filterwarnings(\’ignore\’)data_path = \’/Users/gaofei/Desktop/ensemble/data.csv\’ # 请自行下载数据并替换路径# 读取数据文件data_frame = pd.read_csv(data_path, encoding=\’gbk\’)# 获取字段名cols = list(data_frame.columns)# 归一化scaler = MinMaxScaler()values = scaler.fit_transform(data_frame.values[:, :-1])# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(values[:, :-1], data_frame.values[:, -1], test_size=0.3)# 输出ROC曲线def plot_roc(): # 构建Bagging模型 clf_bagging = BaggingClassifier() # 构建Adaboost模型 clf_ada = AdaBoostClassifier() # 构建GBDT模型 clf_gbdt = GradientBoostingClassifier() # 构建RandomForest模型 clf_rf = RandomForestClassifier() # 构建SVM模型 clf_svm = SVC(probability=True) #若不将probability设为True,predict_proba将不可用 # 构建KNN模型 clf_knn = KNeighborsClassifier() # 构建naive bayes模型 clf_nb = GaussianNB() # 构建Logistic Regression模型 clf_logistic = LogisticRegression() # 构建decision tree模型 clf_dt = DecisionTreeClassifier() # 构建模型集合名称 clfs = [clf_bagging, clf_ada, clf_gbdt, clf_rf, clf_svm, clf_knn, clf_nb, clf_logistic, clf_dt] # 模型名称列表 names = [\’Bagging\’, \’Adaboost\’, \’GBDT\’, \’RandomForest\’, \’SVM\’, \’KNN\’, \’Naive Bayes\’, \’Logistic Regression\’, \’Decision Tree\’] # 各模型预测为1的概率 prbs_1 = [] for clf in clfs: # 训练数据 clf.fit(X_train, y_train) # 输出混淆矩阵 pre = clf.predict(X_test) # 输出预测测试集的概率 y_prb_1 = clf.predict_proba(X_test)[:, 1] prbs_1.append(y_prb_1) for index, value in enumerate(prbs_1): # 得到误判率、命中率、门限 fpr, tpr, thresholds = roc_curve(y_test, value) # 计算auc roc_auc = auc(fpr, tpr) plt.plot(fpr, tpr, label=\'{0}_AUC = {1:.5f}\’.format(names[index], roc_auc)) plt.title(\’ROC曲线\’) plt.xlim([-0.05, 1.05]) plt.ylim([-0.05, 1.05]) plt.legend(loc=\’lower right\’) plt.plot([0, 1], [0, 1], \’r–\’) plt.xlabel(\’误判率\’) plt.ylabel(\’命中率\’) plt.show() return prbs_1if __name__ == \’__main__\’: print(plot_roc())
模型评估:
测试数据绘制的ROC曲线如下:
从上图可以看出,集成学习的算法要明显优于普通算法。
上面代码只是提供算法选取的参考,只是第一步,接下来可以选择几个效果较好的算法利用sklearn的GridSearch进行调参,并最终确定一种算法。
57518586
《机器学习算法汇总,机器学习算法分类》来自互联网同行内容,若有侵权,请联系我们删除!
来电咨询