数据挖掘之我们怎么选择使用哪种分类器

以数据分类任务为例,在分类任务之前,我们需要探索数据,通过数据可视化掌握数据概况,并对数据的完整性和数据质量逆行评估。随后我们围绕分类任务的两大核心问题展开工作。

数据挖掘中分类任务面临两个核心问题:

1,分类器包含SVM,KNN,决策树,朴素贝叶斯分类器等,在做模型训练时,我们到底如何选择分类器?

2,如何优化分类器的参数,提高分类准确率。

文中完整代码详见https://github.com/ccmather/py_workspace

在同一数据中,同时构造svm,KNN,决策树,随机森林分类器,引入pipeline流水线作业模块,对每一个分类器均进行训练,这里,我们需要先对数据进行标准化处理,每一步均采用(名称,步骤)的方式进行。

在训练模型时,事实上,每个模型的参数都很多,取值范围也比较广,如何高效调优呢,我们引入gridsearchcv工具,这是python的参数自动搜索模块,输入想要调整的参数以及参数的取值范围即可,gridsearchcv会将每种情况都处理一遍,输出处理就够,通常,只要输出最优结果即可。

gridsearchcv模块包引入

from sklearn.model_selection import GridSearchCV

涉及到的参数如下:

#@estimator:想要采用的分类器

#@param_grid:想要优化的参数及取值,

#@cv:交叉验证的折数,默认三折交叉验证

#@scoring:准确度的评价标准,

使用示例如下:

def GridSearchCV_work(pipe, train_x, train_y, test_x, test_y, param_grid, score = 'accuracy'):
    response = {}
    gridsearch = GridSearchCV(estimator=pipe, param_grid= param_grid, scoring=score)
    #寻找最优的参数和最优的准确率分数
    search = gridsearch.fit(train_x, train_y)
    print("gridsearch最优参数:", search.best_params_)
    print("gridsearch最优分数:", search.best_score_)

    predict_y = gridsearch.predict(test_x)
    print("accuracy:", accuracy_score(test_y, predict_y))

    response['predict_y'] = predict_y
    response['accuracy_score'] = accuracy_score(test_y, predict_y)
    return response

我们同时采用svm,knn,决策树,随机森林分类器,引入pipeline模块和gridsearchcv模块,对wanwna某银行的信用卡违约数据进行训练,并预测信用卡位于率,主要分为一下三步,

#step1 加载数据

#step2 数据特征处理阶段:采用可视化方式对数据做简单处理,把握数据概况

#step3 分类模型训练阶段:采用pipeine方式,第一步:数据规范化,

                                           第二步:采用SVC,KNN,决策树,RF模型 都训练数据集,

                                           用gridsearchCV工具,找到每个分类器的最优参数和最优分数,

                     最终找到最适合的分类器和分类器的参数。

#数据加载,查看数据集大小,数据概况,做特征工程
data = pd.read_csv('/UCI_Credit_Card.csv')
print(data.shape)
print(data.describe())

#查看下雨个月违规率的情况, value_counts()查看某列有多少不同值,并计算每个不同值在该列中有多少重复值
next_month = data['default.payment.next.month'].value_counts()
print(next_month)

df = pd.DataFrame({'default.payment.next.month':next_month.index, 'values': next_month.values})
plt.figure(figsize=(6,6))
plt.title('信用卡违约率客户\n (违约:1,守约:0')
sns.set_color_codes('pastel')
sns.barplot(x = 'default.payment.next.month', y='values', data = df)
locs, labels = plt.xticks()
plt.show()

 

#pipeline 构造svm,DecisionTree,RF,KNeighbors分类器,
classifiers = [
    SVC(random_state = 1, kernel='rbf'),
    DecisionTreeClassifier(random_state = 1, criterion='gini'),
    RandomForestClassifier(random_state=1, criterion='gini'),
    KNeighborsClassifier(metric='minkowski'),
]

#分类器名称
classifier_names = [
    'svc',
    'decisiontreeclassifier',
    'randomforestclassifier',
    'kneighborclassifier',
]

#分类器参数
classifier_param_grid = [
    {'svc__C':[1], 'svc__gamma':[0.01]},
    {'decisiontreeclassifier__max_depth': [6,9,11]},
    {'randomforestclassifier__n_estimators': [3,5,6]},
    {'kneighborclassifier__n_neighbors': [4,6,8]},
]

最后采用pipeline和gridsearchcv构造分类器训练模型,训练结果如下:

有问题请与我联系

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值