一、实验目的
1.掌握支持向量机回归算法。
2.熟悉sklearn 支持向量机相关的API。
3.掌握不同支持向量机的调用。
二、代码及结果
1.查看数据字段和类型
展示代码:
from sklearn.datasets import load_boston
import pandas as pd
boston = load_boston()
data = pd.DataFrame(boston.data,columns = boston.feature_names)
data['MEDV']= boston.target
data.info()
结果展示:
2.查看每个特征和目标变量MEDV之间的相关系数
展示代码:
corr = data.corr()#查看相关系数
data.corr()['MEDV'].sort_values(ascending = False)
结果展示:
3.绘制相关系数的热力分布图
展示代码:
import matplotlib.pyplot as plt
import seaborn as sns
plt.subplots(figsize = (9,9),dpi = 1080,facecolor = 'w')
fig = sns.heatmap(data.corr(),annot = True,vmax = 1,square = True,cmap = 'Blues',fmt ='.2g')
fig
结果展示:
4.研究不同自变量之间、自变量和因变量之间的关系 (绝对值靠前3的特征)
展示代码:
topfeature = data.corr()['MEDV'].abs().nlargest(4).index[0:]
sns.pairplot(data[topfeature],diag_kind='kde')
plt.show()
结果展示:
5.使用不同核函数配置支持向量机进行回归训练,并且使用MSE,MAE,R-square函数评估模型的性能得出效果最好模型。
展示代码:
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score, KFold
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR
from sklearn.metrics import classification_report
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
#划分数据集
X = boston.data
y = boston.target
X_train,X_test,y_train,y_test =train_test_split(X,y,test_size = 0.2,random_state = 32)
kernels = ['rbf', 'linear', 'poly', 'sigmoid']
for k in kernels:
#模型初始化
svm = SVR(kernel = k)
svm.fit(X_train,y_train)
# 预测
predict = svm.predict(X_test)
# 评估
mse = mean_squared_error(y_test,predict)
mae = mean_absolute_error(y_test,predict)
r2 = r2_score(y_test,predict)
print(f"{k} - MSE: {mse}, MAE: {mae}, R-squared: {r2}")
结果展示:
6.输出效果最好模型的回归系数
粘贴代码:
svm = SVR(kernel = 'linear')
svm.fit(X_train,y_train)
coef_name = list(zip(boston.feature_names,svm.coef_[0]))
coef = pd.DataFrame(coef_name,columns = ['name','coef'])
coef
结果展示:
7.输出效果最好模型的预测值和真实值,并用图表示出来
展示代码:
contrast = list(zip(y_test,svm.predict(X_test)))
contrast_ = pd.DataFrame(contrast,columns = ['test','pre'])
#plt.plot(np.arange(102),y_test,marker = 'o',color = 'red',label = 'y_test')
#plt.plot(np.arange(102),svm.predict(X_test),marker = 'o',color = 'blue',label = 'predict')
plt.figure(figsize = (16,12))
sns.lineplot(x = np.arange(102),y = y_test,label ='y_test')
sns.lineplot(x = np.arange(102),y = svm.predict(X_test),label = 'predict')
plt.grid()
plt.legend()
contrast_
结果展示:
8.将真实值和预测值的散点分布图画在坐标轴上
粘贴代码:
plt.figure(figsize = (12,8))
plt.grid()
plt.scatter(y_test,svm.predict(X_test))
plt.plot([min(y_test),max(y_test)],[min(y_test),max(y_test)],'r--',lw = 2)
plt.show()
结果展示:
9.(选做)数据标准化后放入之前所选效果最好的核函数支持向量机内进行训练并评估
粘贴代码:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
svm = SVR(kernel = 'linear')
svm.fit(X_train_scaled,y_train)
# 预测
predict = svm.predict(X_test_scaled)
# 评估
mse = mean_squared_error(y_test,predict)
mae = mean_absolute_error(y_test,predict)
r2 = r2_score(y_test,predict)
print(f"'linear' - MSE: {mse}, MAE: {mae}, R-squared: {r2}")
结果展示:
三、结果分析
根据实验中的结果,对不同核函数配置的支持向量机模型进行了评估,得到了不同评估指标的数值,如下:
RBF核函数的模型表现较差,其MSE、MAE和R-squared分别为88.31、5.55和0.023。这可能表示RBF核函数对于该数据集的波士顿房价预测效果不佳。
Linear核函数的模型表现最佳,其MSE、MAE和R-squared分别为33.64、3.52和0.628。这表明使用线性核函数的支持向量机模型在该任务上取得了较好的预测效果。
Poly核函数和Sigmoid核函数的模型表现也不理想,相对于Linear核函数,它们的预测性能更差。
四、实验总结
实验结果显示不同核函数对支持向量机的性能产生了显著影响。在这个特定的房价预测问题上,线性核函数表现最好,这可能是因为数据集的线性关系较为明显。因此,在使用支持向量机时,选择合适的核函数非常关键。
MSE、MAE 和 R-squared 是评估回归模型性能的重要指标。MSE 和 MAE 衡量了预测误差的大小,而 R-squared 则描述了模型对目标变量的解释能力。综合考虑这些指标有助于更好地评估模型的表现。
实验中未对数据进行标准化处理。在某些情况下,特别是对于使用核函数的支持向量机算法,对数据进行标准化或缩放可以改善模型的性能。
在模型选择和评估上,可以尝试其他的参数调优策略或模型集成方法来进一步提高模型的性能。同时,对数据进行更深入的探索和特征工程也可能有助于提升模型的预测能力。
本次实验对支持向量机在波士顿房价预测中的应用进行了探索,并针对不同核函数的模型进行了评估。了解了不同核函数的影响以及模型评估指标的重要性,这对于实际问题的建模和预测具有一定的指导意义。