python支持向量机回归_scikit-learn代码实现SVM分类与SVR回归以及调参...

python⽀持向量机回归_scikit-learn代码实现SVM分类与SVR
回归以及调参
分类
⼆分类:
del_selection import train_test_split
from sklearn.svm import SVC
import mglearn.datasets
import matplotlib.pyplot as plt
#forge数据集是⼀个⼆维⼆分类数据集
X,ls.make_handcrafted_dataset()
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2, random_state=33)
机械加工工艺规程
svm=SVC(kernel='rbf',C=10,gamma=0.1,probability=True).fit(X_train,y_train)
print(svm.predict(X_test))
#输出分类概率
print(svm.predict_proba(X_test))
print(svm.score(X_test,y_test))
[0 0 1 1 1 0]
[[0.91919503 0.08080497]
[0.94703815 0.05296185]
[0.04718756 0.95281244]
[0.08991918 0.91008082]
[0.18789225 0.81210775]
[0.83350967 0.16649033]]
0.6666666666666666
多分类:
⽤的是鸢尾花数据集,其实代码和分类差不多
del_selection import train_test_split
from sklearn.svm import SVC
import mglearn.datasets
from sklearn.datasets import load_iris
lr=load_iris()
X_train,X_test,y_train,y_test=train_test_split(lr.data,lr.target,test_size=0.2, random_state=33)
svm=SVC(kernel='rbf',C=10,gamma=0.1,probability=True).fit(X_train,y_train)
print(svm.predict(X_test))
#输出分类概率
梅甘 福克斯
print(svm.predict_proba(X_test))
print(svm.score(X_test,y_test))
[1 1 0 1 2 2 0 0 2 2 2 0 2 1 2 1 1 0 1 2 0 0 2 0 2 1 1 1 2 2] [[0.00854955 0.97805528 0.01339518]
[0.02046015 0.96924699 0.01029286]
[0.95821345 0.02958702 0.01219953]
[0.01262418 0.9436578 0.04371802]
[0.01150194 0.21819026 0.7703078 ]
[0.01106185 0.0025207 0.98641745]
[0.93603376 0.04933543 0.01463081]
[0.97333858 0.01668576 0.00997566]
[0.01176501 0.10464775 0.88358724]
[0.01189284 0.01007565 0.97803151]
[0.01141951 0.0055538 0.98302669]
[0.96745325 0.01936203 0.01318472]
[0.01085658 0.0074639 0.98167952]
[0.00991103 0.934642 0.05544697]
[0.01539224 0.07365073 0.91095703]
[0.01314571 0.9801558 0.00669849]
[0.01167736 0.56576966 0.42255298]
[0.97030247 0.01935948 0.01033805]
[0.01612402 0.9036916 0.08018438]
[0.01584532 0.03144821 0.95270647]
[0.96485254 0.02414839 0.01099907]
[0.95276015 0.03287629 0.01436357]
[0.00943625 0.00639159 0.98417216]
[0.96755483 0.02137253 0.01107264]
[0.00979122 0.52403131 0.46617748]
[0.01150947 0.57310996 0.41538057]
[0.01065238 0.95469906 0.03464856]
[0.01084855 0.98409152 0.00505992]
[0.0121375 0.12769585 0.86016666]
[0.01086478 0.25277848 0.73635675]]
0.9333333333333333
回归
回归的调参和分类是⼀样的。
# 导⼊库
import numpy as np # numpy库
from sklearn.linear_model import BayesianRidge, LinearRegression, ElasticNet # 批量导⼊要实现的回归算法
from sklearn.svm import SVR # SVM中的回归算法
adient_boosting import GradientBoostingRegressor # 集成算法
del_selection import cross_val_score # 交叉检验
ics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score # 批量导⼊指标算法
import pandas as pd # 导⼊pandas
import matplotlib.pyplot as plt # 导⼊图形展⽰库
# 数据准备
raw_data = np.loadtxt('') # 读取数据⽂件
X = raw_data[:, :-1] # 分割⾃变量
y = raw_data[:, -1] # 分割因变量食品添加剂都是坏东西吗
# 训练回归模型
n_folds = 6 # 设置交叉检验的次数
model_br = BayesianRidge() # 建⽴贝叶斯岭回归模型对象
model_lr = LinearRegression() # 建⽴普通线性回归模型对象
model_etc = ElasticNet() # 建⽴弹性⽹络回归模型对象
model_svr = SVR() # 建⽴⽀持向量机回归模型对象
model_gbr = GradientBoostingRegressor() # 建⽴梯度增强回归模型对象
model_names = ['BayesianRidge', 'LinearRegression', 'ElasticNet', 'SVR', 'GBR'] # 不同模型的名称列表
model_dic = [model_br, model_lr, model_etc, model_svr, model_gbr] # 不同回归模型对象的集合
cv_score_list = [] # 交叉检验结果列表
pre_y_list = [] # 各个回归模型预测的y值列表
for model in model_dic: # 读出每个回归模型对象
scores = cross_val_score(model, X, y, cv=n_folds) # 将每个回归模型导⼊交叉检验模型中做训练检验
cv_score_list.append(scores) # 将交叉检验结果存⼊结果列表
pre_y_list.append(model.fit(X, y).predict(X)) # 将回归训练中得到的预测y存⼊列表
# 模型效果指标评估
n_samples, n_features = X.shape # 总样本量,总特征数
#explained_variance_score:解释回归模型的⽅差得分,其值取值范围是[0,1],越接近于1说明⾃变量越能解释因变量引力坍缩
#的⽅差变化,值越⼩则说明效果越差。
#mean_absolute_error:平均绝对误差(Mean Absolute Error,MAE),⽤于评估预测结果和真实数据集的接近程度的程度
#,其其值越⼩说明拟合效果越好。
#mean_squared_error:均⽅差(Mean squared error,MSE),该指标计算的是拟合数据和原始数据对应样本点的误差的
#平⽅和的均值,其值越⼩说明拟合效果越好。
#r2_score:判定系数,其含义是也是解释回归模型的⽅差得分,其值取值范围是[0,1],越接近于1说明⾃变量越能解释因
#变量的⽅差变化,值越⼩则说明效果越差。
model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score] # 回归评估指标对象集
model_metrics_list = [] # 回归评估指标列表
for i in range(5): # 循环每个模型索引
tmp_list = [] # 每个内循环的临时结果列表
for m in model_metrics_name: # 循环每个指标对象
tmp_score = m(y, pre_y_list[i]) # 计算每个回归指标结果
tmp_list.append(tmp_score) # 将结果存⼊每个内循环的临时结果列表
model_metrics_list.append(tmp_list) # 将结果存⼊回归评估指标列表
df1 = pd.DataFrame(cv_score_list, index=model_names) # 建⽴交叉检验的数据框
df2 = pd.DataFrame(model_metrics_list, index=model_names, columns=['ev', 'mae', 'mse', 'r2']) # 建⽴回归指标的数据框
print ('samples: %d \t features: %d' % (n_samples, n_features)) # 打印输出样本量和特征数量
print (70 * '-') # 打印分隔线
print ('cross validation result:') # 打印输出标题
print (df1) # 打印输出交叉检验的数据框
西南师范大学育才学院print (70 * '-') # 打印分隔线
print ('regression metrics:') # 打印输出标题
print (df2) # 打印输出回归指标的数据框
print (70 * '-') # 打印分隔线
print ('short name \t full name') # 打印输出缩写和全名标题
print ('ev \t explained_variance')
print ('mae \t mean_absolute_error')
print ('mse \t mean_squared_error')
print ('r2 \t r2')
print (70 * '-') # 打印分隔线
# 模型效果可视化
plt.figure() # 创建画布
plt.plot(np.arange(X.shape[0]), y, color='k', label='true y') # 画出原始值的曲线
color_list = ['r', 'b', 'g', 'y', 'c'] # 颜⾊列表
linestyle_list = ['-', '.', 'o', 'v', '*'] # 样式列表
for i, pre_y in enumerate(pre_y_list): # 读出通过回归模型预测得到的索引及结果
plt.plot(np.arange(X.shape[0]), pre_y_list[i], color_list[i], label=model_names[i]) # 画出每条预测结果线plt.title('regression result comparison') # 标题
plt.legend(loc='upper right') # 图例位置
plt.ylabel('real and predicted value') # y轴标题
plt.show() # 展⽰图像
# 模型应⽤
print ('regression prediction')
new_point_set = [[1.05393, 0., 8.14, 0., 0.538, 5.935, 29.3, 4.4986, 4., 307., 21., 386.85, 6.58], [0.7842, 0., 8.14, 0., 0.538, 5.99, 81.7, 4.2579, 4., 307., 21., 386.75, 14.67],
[0.80271, 0., 8.14, 0., 0.538, 5.456, 36.6, 3.7965, 4., 307., 21., 288.99, 11.69],
[0.7258, 0., 8.14, 0., 0.538, 5.727, 69.5, 3.7965, 4., 307., 21., 390.95, 11.28]] # 要预测的新数据集for i, new_point in enumerate(new_point_set): # 循环读出每个要预测的数据点
new_point = np.array(new_point).reshape(1, 13)
new_pre_y = model_gbr.predict(new_point) # 使⽤GBR进⾏预测
print ('predict for new point %d is: %.2f' % (i + 1, new_pre_y)) # 打印输出每个数据点的预测信息
E:\anaconda\ E:/py⽂件/机器学习算法/SVC/SVR回归.py
samples: 506 features: 13
----------------------------------------------------------------------
cross validation result:
0 1 2 3 4 5
BayesianRidge 0.662422 0.677079 0.549702 0.776896 -0.139738 -0.024448 LinearRegression 0.642240 0.611521 0.514471 0.785033 -0.143673 -0.015390
ElasticNet 0.582476 0.603773 0.365912 0.625645 0.437122 0.200454
SVR -0.000799 -0.004447 -1.224386 -0.663773 -0.122252 -1.374062
GBR 0.749808 0.806579 0.769107 0.865624 0.379249 0.555424
----------------------------------------------------------------------
regression metrics:
ev mae mse r2
生活方式对健康的影响

本文发布于:2024-09-24 05:28:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/570009.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:回归   模型   数据   指标   对象
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议