【机器学习小实验4】支持向量机回归的波士顿房价预测

一、实验目的

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 则描述了模型对目标变量的解释能力。综合考虑这些指标有助于更好地评估模型的表现。
实验中未对数据进行标准化处理。在某些情况下,特别是对于使用核函数的支持向量机算法,对数据进行标准化或缩放可以改善模型的性能。
在模型选择和评估上,可以尝试其他的参数调优策略或模型集成方法来进一步提高模型的性能。同时,对数据进行更深入的探索和特征工程也可能有助于提升模型的预测能力。
本次实验对支持向量机在波士顿房价预测中的应用进行了探索,并针对不同核函数的模型进行了评估。了解了不同核函数的影响以及模型评估指标的重要性,这对于实际问题的建模和预测具有一定的指导意义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值