一、基算法

1、决策树(Decision Tree)

(1)原理:决策树根据样本数据集的数据特征对数据集进行划分,直到针对所有特征都划分过,或者划分的数据子集的所有数据的类别标签相同。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
from sklearn import tree #调用树算法模型
import graphviz #调用可视化模块
import pydotplus #调用图形界面模块
from sklearn.model_selection import train_test_split #调用样本划分方法
from sklearn2pmml import sklearn2pmml, PMMLPipeline #调用生成pmml文件方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
clf = tree.DecisionTreeClassifier(criterion = 'gini', splitter = 'best', max_depth = None, min_samples_split = 2, min_samples_leaf = 1, min_weight_fraction_leaf = 0.0, max_features = None, random_state = 10, max_leaf_nodes = None, min_impurity_decrease = 0.0, min_impurity_split = None, class_weight = None, presort = False)
clf.fit(X_train, y_train)
print("训练集:", clf.score(X_train, y_train)) #训练集
print("验证集:", clf.score(X_test, y_test)) #验证集
#4、生成PMML文件
pipeline = PMMLPipeline([("classifier", clf)])
pipeline.fit(X_train, y_train)
sklearn2pmml(pipeline, r"C:/Users/马青坡/Desktop/data/dt_iris.pmml")
#5、生成本地pdf文件
dot_data = tree.export_graphviz(clf) #将决策树以pdf格式可视化
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("C:/Users/Desktop/data/decisiontree.pdf") #文件保存到本地

2、逻辑回归(Logistic Regression)

(1)原理:逻辑回归是一种线性分类器,通过logistic函数,将特征映射成一个概率值,来判断输入数据的类别。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression as lr #调用逻辑回归算法模型
from sklearn.model_selection import train_test_split #调用样本划分方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
clf = lr(penalty = 'l2', dual = False, tol = 0.0001, C = 1.0, fit_intercept = True, intercept_scaling = 1, class_weight = None, random_state = None, solver = 'lbfgs', max_iter = 100, multi_class = 'auto', verbose = 0, warm_start = False, n_jobs = None, l1_ratio = None)
clf.fit(X_train, y_train)
print("训练集:", clf.score(X_train, y_train)) #训练集
print("验证集:", clf.score(X_test, y_test)) #验证集

3、支持向量机(SVM, Support Vector Machine)

(1)原理:寻找一个能够正确划分训练数据集并且几何间隔最大的分离超平面。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
from sklearn import svm #调用SVM算法模型
from sklearn.model_selection import train_test_split #调用样本划分方法
from sklearn2pmml import sklearn2pmml, PMMLPipeline #调用生成pmml文件方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
svm = svm.SVC(C = 1.0, kernel = 'rbf', degree = 3, gamma = 'scale', coef0 = 0.0, shrinking = True, probability = False, tol = 0.001, cache_size = 200, class_weight = None, verbose = False, max_iter = -1, decision_function_shape = 'ovr', break_ties = False, random_state = None)
svm.fit(X_train, y_train)
print("训练集:", clf.score(X_train, y_train)) #训练集
print("验证集:", clf.score(X_test, y_test)) #验证集
#4、生成PMML文件
pipeline = PMMLPipeline([("classifier", svm)])
pipeline.fit(X_train, y_train)
sklearn2pmml(pipeline, r"C:/Users/Desktop/data/svm_iris.pmml")

二、集成算法

4、随机森林(Random Forest)

(1)原理:使用CART树作为弱分类器,将多个不同的决策树进行组合,利用这种组合来降低单棵决策树的可能带来的片面性和判断不准确性。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier #调用随机森林算法模型
from sklearn.model_selection import train_test_split #调用样本划分方法
from sklearn2pmml import sklearn2pmml, PMMLPipeline #调用生成pmml文件方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
clf = RandomForestClassifier(n_estimators = 100, criterion = 'gini', max_depth = None, min_samples_split = 2, min_samples_leaf = 1, min_weight_fraction_leaf = 0.0, max_features = 'auto', max_leaf_nodes = None, min_impurity_decrease = 0.0, min_impurity_split = None, bootstrap = True, oob_score = False, n_jobs = None, random_state = None, verbose = 0, warm_start = False, class_weight = None, ccp_alpha = 0.0, max_samples = None)
clf.fit(X_train, y_train)
print("训练集:", clf.score(X_train, y_train)) #训练集
print("验证集:", clf.score(X_test, y_test)) #验证集
#4、生成PMML文件
pipeline = PMMLPipeline([("classifier", clf)])
pipeline.fit(X_train, y_train)
sklearn2pmml(pipeline, r"C:/Users/Desktop/data/rf_iris.pmml")

5、AdaBoost(Adaptive Boosting)

(1)原理:AdaBoost算法中,前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
from sklearn.ensemble import AdaBoostClassifier #调用AdaBoost算法模型
from sklearn.model_selection import train_test_split #调用样本划分方法
from sklearn2pmml import sklearn2pmml, PMMLPipeline #调用生成pmml文件方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
clf = AdaBoostClassifier(base_estimator = None, n_estimators = 50, learning_rate = 1.0, algorithm = 'SAMME.R', random_state = None)
clf.fit(X_train, y_train)
print("训练集:", clf.score(X_train, y_train)) #训练集
print("验证集:", clf.score(X_test, y_test)) #验证集
#4、生成PMML文件
pipeline = PMMLPipeline([("classifier", clf)])
pipeline.fit(X_train, y_train)
sklearn2pmml(pipeline, r"C:/Users/Desktop/data/ada_iris.pmml")

6、GBDT(Gradient Boosting Decision Tree)

(1)原理:GBDT是每次建立单个分类器时,是在之前建立的模型的损失函数的梯度下降方向。GBDT的核心在于每一棵树学的是之前所有树结论和的残差,残差就是真实值与预测值的差值,所以为了得到残差,GBDT中的树全部是回归树,之所以不用分类树,是因为分类的结果相减是没有意义的。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
from sklearn.ensemble import GradientBoostingClassifier #调用GBDT算法模型
from sklearn.model_selection import train_test_split #调用样本划分方法
from sklearn2pmml import sklearn2pmml, PMMLPipeline #调用生成pmml文件方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
clf = GradientBoostingClassifier(loss = 'deviance', learning_rate = 0.1, n_estimators = 100, subsample = 1.0, criterion = 'friedman_mse', min_samples_split = 2, min_samples_leaf = 1, min_weight_fraction_leaf = 0.0, max_depth = 3, min_impurity_decrease = 0.0, min_impurity_split = None, init = None, random_state = None, max_features = None, verbose = 0, max_leaf_nodes = None, warm_start = False, presort = 'deprecated', validation_fraction = 0.1, n_iter_no_change = None, tol = 0.0001, ccp_alpha = 0.0)
clf.fit(X_train, y_train)
print("训练集:", clf.score(X_train, y_train)) #训练集
print("验证集:", clf.score(X_test, y_test)) #验证集
#4、生成PMML文件
pipeline = PMMLPipeline([("classifier", clf)])
pipeline.fit(X_train, y_train)
sklearn2pmml(pipeline, r"C:/Users/Desktop/data/gbdt_iris.pmml")

7、XGBoost(eXtreme Gradient Boosting)

(1)原理:XGBoost的原理与GBDT基本相同,但XGB是在GBDT基础上的优化。相比而言,XGB主要有2点优化:①XGB支持并行,速度快;②损失函数加入了正则项,防止过拟合。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
from xgboost import XGBClassifier #调用xgb算法模型
from sklearn.model_selection import train_test_split #调用样本划分方法
from sklearn2pmml import sklearn2pmml, PMMLPipeline #调用生成pmml文件方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
clf = XGBClassifier(max_depth=3, learning_rate=0.1, n_estimators=100, verbosity=1, silent=None, objective='binary:logistic', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, colsample_bynode=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, random_state=0, seed=None, missing=None)
clf.fit(X_train, y_train)
print("训练集:", clf.score(X_train, y_train)) #训练集
print("验证集:", clf.score(X_test, y_test)) #验证集
#4、生成PMML文件
pipeline = PMMLPipeline([("classifier", clf)])
pipeline.fit(X_train, y_train)
sklearn2pmml(pipeline, r"C:/Users/Desktop/data/xgb_iris.pmml")

8、LightGBM(Light Gradient Boosting Machine)

(1)原理:LightGBM是在XGB基础上的优化,主要优化点在于速度更快、占用内存更小、精确度更高、支持类别变量。

(2)代码实现:

#1、调用包和方法
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import make_classification
import lightgbm as lgb #调用lgbm算法模型
from sklearn.model_selection import train_test_split #调用样本划分方法
from sklearn2pmml import sklearn2pmml, PMMLPipeline #调用生成pmml文件方法
#2、导入数据
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 40) # 划分训练集和验证集
#3、训练、验证模型
gbm = lgb.LGBMRegressor(boosting_type = 'gbdt', num_leaves = 31, max_depth = -1, learning_rate = 0.05, n_estimators = 100, subsample_for_bin = 200000, objective = 'regression', class_weight = None, min_split_gain = 0.0, min_child_weight = 0.001, min_child_samples = 20, subsample = 1.0, subsample_freq = 0, colsample_bytree = 1.0, reg_alpha = 0.0, reg_lambda = 0.0, random_state = None, n_jobs = -1, silent = True, importance_type = 'split')
gbm.fit(X_train, y_train,eval_set = [(X_test, y_test)], eval_metric = 'l1', early_stopping_rounds = 10)
gbm.fit(X_train, y_train)
#测试集预测
y_pred = gbm.predict(X_test, num_iteration = gbm.best_iteration_)
##模型评估
print("The rmse of prediction is: ", mean_squared_error(y_test, y_pred) ** 0.5)
#特征重要性
print("Feature importances: ", list(gbm.feature_importances_))
#网格搜索法调参
estimator = lgb.LGBMRegressor(num_leaves = 31)
param_grid = {"learning_rate": [0.01, 0.1, 1], "n_estimators": [20, 40]}
gbm = GridSearchCV(estimator, param_grid)
#训练模型
gbm.fit(X_train, y_train)
#输出最优参数
print("Best parameters found by grid search are: ", gbm.best_params_)
#训练集、验证集评分
print("训练集:", gbm.score(X_train, y_train)) #训练集
print("验证集:", gbm.score(X_test, y_test)) #验证集
#4、生成PMML文件
pipeline = PMMLPipeline([("classifier", gbm)])
pipeline.fit(X_train, y_train)
sklearn2pmml(pipeline, r"C:/Users/Desktop/data/gbm_iris.pmml")

几种风控算法的原理和代码实现相关推荐

  1. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  2. 【编程实践】Raft 算法的原理 go代码实例

    文章目录 Raft 算法的原理 & go代码实例 Raft 算法的原理 使用 Go 语言实现的简单 Raft 算法示例 Raft 算法的原理 & go代码实例 Raft 算法的原理 R ...

  3. 岭回归算法的原理和代码实战

    岭回归算法的原理和代码实战 前言 学过吴恩达老师的机器学习入门课程都应该知道,在逻辑回归那一讲,吴老师提到了使用正则化来防止逻辑回归模型过拟合.而岭回归在这里的作用是一样的,同样也是防止模型过拟合.这 ...

  4. ICCV2017跟踪算法BACF原理及代码解析

    文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual ...

  5. TPAMI2015跟踪算法KCF原理及代码解析

    文章和代码下载地址: http://www.robots.ox.ac.uk/~joao/circulant/ 一.基础公式的由来 相关滤波跟踪器可以表示为最小化的岭回归问题: 表示期望相应,表示正则系 ...

  6. 12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

    0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比 ...

  7. 用于Transformer的6种注意力的数学原理和代码实现

    Transformer 的出色表现让注意力机制出现在深度学习的各处.本文整理了深度学习中最常用的6种注意力机制的数学原理和代码实现. 1.Full Attention 2017的<Attenti ...

  8. CVPR2018跟踪算法STRCF原理及代码解析

    文章和代码下载地址: STRCF: Feng Li, Cheng Tian, Wangmeng Zuo, Lei Zhang, Ming-Hsuan Yang. "Learning Spat ...

  9. PCA算法的原理以及代码实现

    目录 PCA算法是如何实现的? 1.对原始数据零均值化(中心化) 2.求协方差矩阵 3.对协方差矩阵求特征向量和特征值 评价模型的好坏,K值的确定 PCA算法的优缺点: 优点: 缺点: PCA算法的实 ...

最新文章

  1. 搞懂单链表常见面试题
  2. 《Imperfect C++中文版》——第2章 对象生命期
  3. JAVA 调用Web Service
  4. JS语言的基本构成、变量、数据类型
  5. CMOS图像传感器——TOF 图像传感器
  6. 95-150-015-源码-Sink-SinkFunction
  7. Android NDK开发之 arm_neon.h文件ABI说明
  8. 增强用户体验,设置快捷键
  9. 一些著名的大公司面试题目-java
  10. solr java 客户端
  11. 把标清视频转高清Video Enhance AI for mac
  12. HTTP常见状态码及常见错误
  13. 【Beta】 第三次Daily Scrum Meeting
  14. 数学专业的数学与计算机专业的数学的比较(转)
  15. 【Qt】模型/视图结构和数据绑定控件
  16. 直播回放:快速上手,使用 Kotlin 把支付宝小程序装进自己的 App
  17. 操作系统之Windows
  18. 【英语做题】英语“八股文“学习
  19. 小技巧:如何让你办公更高效(技巧大集合持续更新中)!
  20. failed to parse the connection string near ‘;serverTimezone=Hongkongamp;characterEncoding=utf-8amp

热门文章

  1. android R Variable Refresh Rate 可变帧率 VRR
  2. python中nonetype指什么_关于python:什么是’NoneType’对象?
  3. 把csdn博客打包成md文件的办法,便于迁移到其他博客平台或者自己的博客上,一分钟搞定
  4. 正确在遍历中删除List元素
  5. 《信息管理学基础》——娄策群(第二版)第二章答案
  6. 若依RuoYi框架浅析 部署篇①——阿里云服务器ECS准备
  7. Excel怎么将小数转为分数
  8. avue.js:done is not a function
  9. 基于FPGA数字示波器
  10. win10程序最小化后任务栏没有显示的解决方法