提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、支持向量机的参数与属性
  • 二、使用步骤
    • 1.导库并加载数据集
    • 2.使用SVM进行分类
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、支持向量机的参数与属性

clf = SVC(C=1.0,#C是用来控制惩罚项的惩罚力度的系数。如果C大,模型会选择边际较小,能够更好分类所有训练点的决策边界kernel='rbf',#选择的核函数linear, poly,sigmoid, rbfdegree=3,#ploy多项式核函数的次数gamma='scale',#核函数的系数coef0=0.0,#poly sigmoid核函数的常数项shrinking=True,probability=True,#是否启用概率估计,SVC的接口predict_proba和predict_log_proba将生效tol=0.001,cache_size=5000,#可以使用的内存class_weight='balanced',#数据集是否平衡verbose=False,max_iter=-1,decision_function_shape='ovr',break_ties=False,random_state=None,)#属性
#准确率得分0.7434221551868611
clf.score(x_test, y_test)
#decision_function只会生成一列到分类超平面的距离,样本类别由距离的符号确定
clf.decision_function(x_test)
#属性n_support_:调用每个类别下的支持向量的数目
clf_proba.n_support_
#属性coef_:每个特征的重要性,这个系数仅仅适合于线性核
clf_proba.coef_
#属性intercept_:查看生成的决策边界的截距
clf_proba.intercept_
#属性dual_coef_:查看生成的拉格朗日乘数
clf_proba.dual_coef_
clf_proba.dual_coef_.shape
#注意到这个属性的结构了吗?来看看查看支持向量的属性
clf_proba.support_vectors_
clf_proba.support_vectors_.shape
#注意到dual_coef_中生成的拉格朗日乘数的数目和我们的支持向量的数目一致
#注意到KKT条件的条件中的第五条,所有非支持向量会让拉格朗日乘数为0
#所以拉格朗日乘数的数目和支持向量的数目是一致的
#注意,此情况仅仅在二分类中适用!
菜菜的sklearn课堂直播间: https://live.bilibili.com/12582510
sklearn

二、使用步骤

1.导库并加载数据集

代码如下:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import RFE
import lightgbm as lgbdata = pd.read_csv(r'F:\教师培训\ppd7\df_Master_clean.csv',encoding='gb18030')
x = data[data.target.notnull()].drop(columns=['Idx', 'target', 'sample_status', 'ListingInfo'])
y = data[data.target.notnull()]['target']
x_train,x_test, y_train, y_test = train_test_split(x,y,random_state=2,test_size=0.2).sample(n=10000)

2.使用SVM进行分类

数据集是一个信用开数据集,属于不平衡的二分类问题:

没有进行特征筛选的效果


kernel = ['linear', 'poly','rbf','sigmoid']
for kernel in kernel:clf = SVC(C=1.0,#C是用来控制惩罚项的惩罚力度的系数。kernel=kernel,#linear, poly,sigmoid, rbfdegree=3,#ploy的次数gamma='scale',#核函数的系数coef0=0.0,#poly sigmoid核函数的常数项shrinking=True,probability=True,#是否启用概率估计,SVC的接口predict_proba和predict_log_proba将生效tol=0.001,cache_size=5000,#可以使用的内存class_weight='balanced',#数据集是否平衡verbose=False,max_iter=-1,decision_function_shape='ovr',break_ties=False,random_state=None,).fit(x_train, y_train)acc = clf.score(x_test, y_test)auc = cross_val_score(clf, x_test, y_test,scoring='roc_auc', cv=3).mean()print('kernel=%s, acc=%f, auc=%f'% (kernel, acc, auc))

#通过REF递归消除法,进行特征筛选,并重新划分训练集测试集
clf1 = lgb.LGBMClassifier(n_estimators=800,boosting_type='gbdt',learning_rate=0.04,min_child_samples=68,min_child_weight=0.01,max_depth=4,num_leaves=16,colsample_bytree=0.8,subsample=0.8,reg_alpha=0.7777777777777778,reg_lambda=0.3,objective='binary')x_rfe = RFE(clf1, n_features_to_select=113, step=50).fit_transform(x, y)
x_rfe_stand = StandardScaler().fit_transform(x_rfe)
x_train,x_test, y_train, y_test = train_test_split(x_rfe_stand,y,random_state=2,test_size=0.2)
#训练模型,一般来说高斯径向基核函数效果不错
clf = SVC(C=1.0,#C是用来控制惩罚项的惩罚力度的系数。kernel='rbf',#linear, poly,sigmoid, rbfdegree=3,#ploy的次数gamma='scale',#核函数的系数shrinking=True,probability=True,#是否启用概率估计,SVC的接口predict_proba和predict_log_proba将生效tol=0.001,cache_size=5000,#可以使用的内存class_weight='balanced',#数据集是否平衡verbose=False,max_iter=-1,decision_function_shape='ovr',break_ties=False,random_state=None,).fit(x_train, y_train)
#准确率得分0.7434221551868611
clf.score(x_test, y_test)
#原始交叉验证roc_auc面积0.6944635255477508
cross_val_score(clf, x_test, y_test,scoring='roc_auc', cv=3).mean()
#decision_function只会生成一列到分类超平面的距离,样本类别由距离的符号确定
clf.decision_function(x_test)
#会生成两个类别分别对应的概率
pre = clf.predict_proba(x_test)
#此时的threshold就不是一个概率值,而是距离值中的阈值了,所以它可以大于1,也可以为负
fpr, tpr, thresholds = roc_curve(y_test, pre[:,1])
area = roc_auc_score(y_test, pre[:,1])#计算auc分数0.7124797801856899#画图
plt.plot(fpr, tpr, color='red', label='roc_curve(area=%0.2f)' % area, linestyle='--')
plt.plot([0,1],[0,1],color='b',linestyle='-')
plt.xlabel('fpr')
plt.ylabel('tpr')
plt.title('Receiver operating characteristic example')
plt.legend(loc='lower right')
plt.show()#此数据集调参太耗时,就没有进行下一步,调参后效果应该好些。

最后介绍下线性支持向量机
#线性支持向量机类LinearSVC

‘’’
class sklearn.svm.LinearSVC (penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’,fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)

线性支持向量机其实与SVC类中选择"linear"作为核函数的功能类似,但是其背后的实现库是liblinear而不是libsvm,这使得在线性数据上,linearSVC的运行速度比SVC中的“linear”核函数要快,不过两者的运行结果相似。在现实中,许多数据都是线性的,因此我们可以依赖计算得更快得LinearSVC类。除此之外,线性支持向量可以很容易地推广到大样本上,还可以支持稀疏矩阵,多分类中也支持ovr方案。

from sklearn.svm import LinearSVC
'''
loss  在求解决策边界过程中使用的损失函数,可以输入"hinge"或者“squared_hinge”,默认为“square_hinge”
当输入“hinge",表示默认使用和类SVC中一致的损失函数,使用”squared_hinge“表示使用SVC中损失函数的平方作为损失函数。
dual布尔值,默认为True
选择让算法直接求解原始的拉格朗日函数,或者求解对偶函数。当选择为True的时候,表示求解
对偶函数,如果样本量大于特征数目,建议求解原始拉格朗日函数,设定dual = False
'''
lsvc = LinearSVC(penalty='l2',loss='squared_hinge',dual=False,#当选择为True的时候,表示求解对偶函数,如果样本量大于特征数目,建议求解原始拉格朗日函数,设定dual = Falsetol=0.0001,C=1.0,multi_class='ovr',fit_intercept=True,intercept_scaling=1,class_weight='balanced',verbose=0,random_state=None,max_iter=1000,).fit(x_train, y_train)

总结

本节是用支持向量机在我们自己的数据上的应用。

支持向量机在风控竞赛数据集上的应用相关推荐

  1. 在自定义的数据集上训练YOLOv5详细教程分享

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 YOLO系列的目标检测模型随着YOLOv5的引入变得越来越强大了. ...

  2. Dataset之RentListingInquries:RentListingInquries(Kaggle竞赛)数据集的简介、下载、案例应用之详细攻略

    Dataset之RentListingInquries:RentListingInquries(Kaggle竞赛)数据集的简介.下载.案例应用之详细攻略 目录 RentListingInquries比 ...

  3. Dataset之HiggsBoson:Higgs Boson(Kaggle竞赛)数据集的简介、下载、案例应用之详细攻略

    Dataset之HiggsBoson:Higgs Boson(Kaggle竞赛)数据集的简介.下载.案例应用之详细攻略 目录 Higgs Boson比赛简介 Higgs Boson数据集的下载 Hig ...

  4. 无需在数据集上学习和预训练,这种图像修复新方法效果惊人 | 论文

    林鳞 编译自 Github 量子位 出品 | 公众号 QbitAI Reddit上又炸了,原因是一个无需在数据集上学习和预训练就可以超分辨率.修补和去噪的方法:Deep image prior. 帖子 ...

  5. 深度学习笔记:在小数据集上从头训练卷积神经网络

    目录 0. 前言 1. 数据下载和预处理¶ 2. 搭建一个小的卷积网络 3. 数据预处理 4. 模型训练¶ 5. 在测试集进行模型性能评估 6. 小结¶ 0. 前言 本文(以及接下来的几篇)介绍如何搭 ...

  6. 计算机视觉相关比赛,竞赛 | Kaggle上有哪些有趣又多金的计算机视觉类比赛?

    原标题:竞赛 | Kaggle上有哪些有趣又多金的计算机视觉类比赛? 本文阅读时间约5分钟 如今计算机视觉已经成为人工智能领域的热门研究对象,很多小伙伴都想通过一些有效的途径来学习和运用所学知识,有什 ...

  7. 实验二:用python实现SVM支持向量机并对鸢尾花数据集分类

    实验二:SVM支持向量机 1. 实验内容: (1)用你熟知的语言(尽量使用python)实现支持向量机的算法,并在给定的数据集上训练. (2)在测试集上用训练好的支持向量机进行测试,并将预测结果以cs ...

  8. KITTI数据集上MaskRCNN检测效果示例

    KITTI数据集上MaskRCNN检测效果示例 在Semantic Instance Segmentation Evaluation中,MaskRCNN性能效果排名第一. Test Image 0 I ...

  9. 为了提升在小数据集上的性能,有学者让神经网络像生物一样“进化”了|CVPR2021 Oral...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨二玖 审稿丨邓富城 编辑丨极市平台 导读 如何在较小的数据集上训练神经网络?马里兰大学的学者提出 ...

  10. python计算多个模型在不同数据集上的预测概率、获取每个数据集上的最优模型、多个最优模型的ROC曲线进行对比分析

    pytyon计算多个模型在不同数据集上的预测概率.获取每个数据集上的最佳模型.多个最优模型的ROC曲线进行对比分析 目录

最新文章

  1. 《少有人走的路:心智成熟的旅程》--[美]M·斯科特·派克
  2. 进入一个目录需要那些权限
  3. 笔记本超频会烧吗_笔记本电脑cpu超频是什么意思?超频会怎样啊?
  4. html5缓动下拉菜单,HTML5 Canvas鼠标跟随的缓动效果
  5. RESTful 架构详解设计模式一种约束
  6. AIO、NIO、BIO
  7. 高斯克吕格投影中有关带号与经度的关系
  8. 长方形内正方形Square
  9. HCIA-USG Security Policy
  10. 全新系列手机 配索尼4800万摄像头
  11. diagnosing error in object detectors 浅析
  12. Java实现斗地主的发牌以及展示
  13. EasyPoi导出之复杂合并单元格
  14. 我的实践:通过一个一维线性回归入门pytorch
  15. Kafka从入门到精通(七)分区和副本机制
  16. 所有者权益和资产的区别是什么?
  17. 凯利公式指导投资示例
  18. wordpress elementor background overlay层 inert headr and footer动态切换透明度
  19. Solver lbfgs supports only “l2” or “none” penalties, got l1 penalty.解决办法
  20. 网络营销的20条推广方法,其中50%毫无意义

热门文章

  1. SecureCRT 颜色
  2. 初探单点登录 SSO
  3. easyui missingMessage
  4. 20145209 《信息安全系统设计基础》第13周学习总结
  5. 计算机科学中常见计量单位解析
  6. NYOJ-525 一道水题
  7. 三次握手与accept()函数
  8. 热点:安全问题是否能将DNS推入云服务
  9. 为什么有时候代码会提示要去掉@override
  10. JCI标准认证对我国医院建设有什么意义?