机器学习之支持向量回归(SVR)预测房价—基于python

这篇具有很好参考价值的文章主要介绍了机器学习之支持向量回归(SVR)预测房价—基于python。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

      大家好,我是带我去滑雪!

      本期使用爬取到的有关房价数据集data.csv,使用支持向量回归(SVR)方法预测房价。该数据集中“y1”为响应变量,为房屋总价,而x1-x9为特征变量,依次表示房屋的卧室数量、客厅数量、面积、装修情况、有无电梯、、房屋所在楼层位置、有无地铁、关注度、看房次数共计9项。

    (ps,往期出过一个利用SVR预测房价,但代码没有分开讲,许多童鞋复制代码运行,总会出现各种问题,所以应童鞋要求,出一篇更为仔细的博客,大部分博主讲解SVR都采用python自带波士顿房价数据集,但很多童鞋大多都需要用到自己的数据集进行SVR建模,我想这也许对部分童鞋有一定帮助)

(1)导入所需模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import KFold,StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.svm import LinearSVR
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
get_ipython().run_line_magic('matplotlib', 'inline')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'
import warnings

        如果是第一次运行上述模块,报错 ModuleNotFoundError:Nomodulenamed'xxx'情况,需安装相应xxx名称的库,若使用jupyter notebook可以使用pip install xxx,若使用pycharm可以在设置里的packages里安装对应的包或者在控制台里使用pip install xxx。若都不行,可以上网浏览一下其他方法。

(2)导入数据集

data=pd.read_csv('data.csv')
data

输出结果:

  x1 x2 x3 x4 x5 x6 x7 x8 x9 y1
0 2 2 78.60 0 1 2 1 58 14 210.0
1 4 2 98.00 0 1 0 1 2337 18 433.0
2 2 1 58.10 2 1 1 1 25 18 255.0
3 4 2 118.00 3 0 1 0 2106 6 195.0
4 3 1 97.70 2 0 2 0 1533 7 150.0
... ... ... ... ... ... ... ... ... ... ...
2979 3 2 132.51 0 1 1 0 28 5 375.0
2980 2 1 80.30 2 1 1 1 8 0 375.0
2981 2 2 64.81 2 1 1 1 2 0 268.0
2982 2 1 57.26 0 0 0 1 0 0 235.0
2983 2 1 75.38 2 1 2 0 0 0 300.0

2984 rows × 10 columns

      本文采用 “pd.read_csv” 导入数据,也可以采用 ”pd.read_excel“ 。使用pd.read_csv('data.csv')表示在工作路径直接读取data.csv文件,所以需要提前将数据集放入工作路径中。若不好找工作路径,也可以使用data = pd.read_csv(r'E:\工作\硕士\博客\博客19-SVR预测房价\data.csv')读取数据,效果是一样的。

data = pd.read_csv(r'E:\工作\硕士\博客\博客19-SVR预测房价\data.csv')
data

输出结果:

  x1 x2 x3 x4 x5 x6 x7 x8 x9 y1
0 2 2 78.60 0 1 2 1 58 14 210.0
1 4 2 98.00 0 1 0 1 2337 18 433.0
2 2 1 58.10 2 1 1 1 25 18 255.0
3 4 2 118.00 3 0 1 0 2106 6 195.0
4 3 1 97.70 2 0 2 0 1533 7 150.0
... ... ... ... ... ... ... ... ... ... ...
2979 3 2 132.51 0 1 1 0 28 5 375.0
2980 2 1 80.30 2 1 1 1 8 0 375.0
2981 2 2 64.81 2 1 1 1 2 0 268.0
2982 2 1 57.26 0 0 0 1 0 0 235.0
2983 2 1 75.38 2 1 2 0 0 0 300.0

2984 rows × 10 columns

(3)随机划分70%训练集与30%测试集

y=data.y1#将响应变量y1赋值给y
data_train,data_test,y_train,y_test=train_test_split(data,y,test_size=0.3,random_state=1)

(4)对划分后的训练集和测试集中的特征变量进行数据标准化

       由于特征变量的取值范围不尽相同,使用sklearn的StandardScaler类,将训练集和测试集中的所有特征变量进行标准化(即,均值为0,标准差为1)。"values.reshape(-1,1)"是将数据中的所有元素按照一列的形式重新排列,其中,-1 表示自动计算行数,1 表示只有一列。

scaler = StandardScaler()

scaler.fit(data_train)
data_train_s=scaler.fit_transform(data_train)#对训练集中的特征变量进行标准化
data_test_s=scaler.fit_transform(data_test)#对测试集的特征变量进行标准化

(5)进行支持向量回归

        使用sklearn的SVR类分别进行径向核(rbf)、二次多项式核(poly,2)、三次多项式核(poly,3)、S型核进行支持向量回归。使用 fit()方法对SVR进行估计,在这里使用默认参数”epsilon=0.1“,即SVR的调节参数为0.1。使用score()方法,计算测试集的拟合优度。

model=SVR(kernel='rbf')#使用径向核(rbf)
model.fit(data_train_s,y_train)#模型估计
model.score(data_test_s,y_test)#计算拟合优度

输出结果:

0.28217697180917056

model=SVR(kernel='poly',degree=2)#使用二次多项式核
model.fit(data_train_s,y_train)#模型估计
model.score(data_test_s,y_test)#计算拟合优度

输出结果:

0.35607964447352425

model=SVR(kernel='poly',degree=3)#使用三次多项式核
model.fit(data_train_s,y_train)#模型估计
model.score(data_test_s,y_test)#计算拟合优度

输出结果:

0.5944110925400512

model=SVR(kernel='sigmoid')#使用S型核
model.fit(data_train_s,y_train)#模型估计
model.score(data_test_s,y_test)#计算拟合优度

输出结果:

0.7219197626971094
本模型采用不同核的测试集拟合优度表
  径向核 二次多项式核 三次多项式核 S型核
测试集拟合优度 0.2821 0.3561 0.5944 0.7219

       通过对比,我们发现采用S型核效果最好,测试集的拟合优度达到0.7219,故本文采取S型核。由于截至目前,超参数都是选用,默认的设置,下面选择最优超参数组合,进一步提升模型效果。

(6)使用交叉验证选择最优的超参数组合(C,epsilon,r)

param_grid={'C':[0.01,0.1,1,10,50,100,150],'epsilon':[0.01,0.1,1,10],'gamma':[0.01,0.1,1,10]}#定义参数网格
kfold=KFold(n_splits=10,shuffle=True,random_state=1)#定义10折随机分组
model=GridSearchCV(SVR(),param_grid,cv=kfold)
model.fit(data_train_s,y_train)
model.best_params_

输出结果:

{'C': 150, 'epsilon': 10, 'gamma': 0.01}

        结果显示,最优参数组合为C=150, epsilon=10, gamma=0.01。

(7)结合最优超参数组合,重新定义model为最优模型,展示支持向量数目

model1=model.best_estimator_#结合最优超参数,重新定义最优model
len(model1.support_)#展示支持向量数目
data_train_s.shape#展示训练集形状

输出结果:

   270

(2088, 10)

model1.score(data_test_s,y_test)#计算测试集拟合优度

输出结果:

0.984653838741239

       结果显示,模型采用最优参数组合后,共有270个支持向量,测试集的拟合优度也由原来的0.7219提高到了0.9847。

(8)模型预测

sigmoid_pred=model1.predict(data_test_s)#使用测试集预测房价
sigmoid_pred.shape#展示输出预测值形状

输出结果:

(896,)

(9)计算模型预测效果评价指标

model1_rmse = np.sqrt(mean_squared_error(y_test,sigmoid_pred))    #RMSE
model1_mae = mean_absolute_error(y_test,sigmoid_pred)   #MAE
model1_r2 = r2_score(y_test, sigmoid_pred)  # R2
print("The RMSE of RBF_SVR: ", model1_rmse)
print("The MAE of RBF_SVR: ",model1_mae)
print("R^2 of RBF_SVR: ",model1_r2)

输出结果:

The RMSE of RBF_SVR:  28.973562943677987
The MAE of RBF_SVR:  11.142043434442739
R^2 of RBF_SVR:  0.984653838741239

(10)保存预测值与真实值到excel

sigmoid_pred_true=pd.concat([pd.DataFrame(sigmoid_pred),pd.DataFrame(y_test)],axis = 1)#axis=1 表示按照列的方向进行操作,也就是对每一行进行操作。
sigmoid_pred_true.columns=['predictvalues', 'realvalues']
sigmoid_pred_true.to_excel(r'E:\工作\硕士\博客\博客19-SVR预测房价\预测值与真实值.xlsx',index = False)

输出结果:

链接:https://pan.baidu.com/s/1p4HDhBH4QNtFLv-1UIoZ9Q?pwd=7qc5 
提取码:7qc5

      博主保存预测值与真实值时发现 ,真实值在excel里一列里没有连续保存,导致真实值与预测值没有一一对应,所以需要将数据处理一下,选中realvalues列,复制到新表里,然后按住ctrl+G,定位条件选择空白行,点击确定,在选中空白行删除,则将真实值变为连续序列,在复制回去与真实值一一对应。

(11)绘制预测值与真实值比较图

data1= pd.read_csv(r'E:\工作\硕士\博客\博客19-SVR预测房价\data1.csv')#导入真实值与预测值数据

 plt.subplots(figsize=(10,5))
plt.xlabel('896套房', fontsize =10)
plt.ylabel('房价', fontsize =10)
plt.plot(data1.predictvalues, color = 'b', label = '预测值')
plt.plot(data1.realvalues, color = 'r', label = '真实值')
plt.legend(loc=0)
plt.savefig("squares.png",
            bbox_inches ="tight",
            pad_inches = 1,
            transparent = True,
            facecolor ="w",
            edgecolor ='w',
            dpi=300,
            orientation ='landscape')

输出结果:

机器学习之支持向量回归(SVR)预测房价—基于python


更多优质内容持续发布中,请移步主页查看。

 若有问题可邮箱联系:1736732074@qq.com 

博主的WeChat:TCB1736732074

   点赞+关注,下次不迷路!

 文章来源地址https://www.toymoban.com/news/detail-440028.html

 

到了这里,关于机器学习之支持向量回归(SVR)预测房价—基于python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 支持向量机回归预测SVR——MATLAB超详细代码实现过程

            本文主要针对支持向量机回归预测在MATLAB中的实现过程进行陈述,方便读者可以快速上手实现SVR回归预测,对支持向量机的原理将不再进行陈述。在MATLAB中实现相关向量机回归预测主要是调用MATLAB自带的SVR工具箱,所以了解工具箱的相关参数的基本设置是很有必要

    2024年01月16日
    浏览(54)
  • 使用 Python 的支持向量回归 (SVR):预测建模的实用方法

    介绍 : 支持向量回归 (SVR) 是一种用于解决回归问题的强大算法。它是支持向量机 (SVM) 的一部分,用于变量之间的非线性关系。 在本文中,我们将学习如何使用 python 语言实现它。 了解 SVR: SVR 的目标是找到最适合数据点的超平面,同时允许误差容限。传统的回归模型专注

    2024年02月14日
    浏览(41)
  • 机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】

    目录 前言 一、什么是线性回归 二、什么是逻辑回归 三、基于Python 和 Scikit-learn 库实现线性回归 示例代码:  使用线性回归来预测房价: 四、基于Python 和 Scikit-learn 库实现逻辑回归 五、总结  线性回归的优缺点总结: 逻辑回归(Logistic Regression)是一种常用的分类算法,具有

    2024年04月13日
    浏览(45)
  • 基于粒子群优化的支持向量机房价预测分析

          大家好,我是带我去滑雪!       在本期中,首先介绍如何爬取房价数据与清洗数据,对处理后的数据进行简单分析,最后使用粒子群优化的支持向量机对房价进行预测。基于粒子群优化的支持向量机(Particle Swarm Optimization-based Support Vector Machine,PSO-SVM)房价预测分析

    2024年03月15日
    浏览(48)
  • 机器学习(三):基于线性回归对波士顿房价预测

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《机器学习案例》 ,本专栏精选了经典的机器学习算法进行讲解,针对大学生、初级数据分析工程师精心打造ÿ

    2023年04月25日
    浏览(52)
  • 【算法】灰狼算法GWO优化支持向量机回归SVR模型

    GWO是一种基于灰狼行为的 优化算法 ,由Mirjalili等人于2014年提出。该算法模拟灰狼群的捕猎行为,通过模拟狼群中的Alpha、Beta、Delta三种角色的行为来实现全局优化,具有收敛速度快、精度高、易于实现等特点。 初始化狼群位置和适应度函数。 计算每个狼的适应度,并记录

    2023年04月22日
    浏览(100)
  • 回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测

    预测效果 基本介绍 1.MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测; 2.运行环境为Matlab2018b; 3.输入多个特征,输出单个变量,多变量回归预测; 4.data为数据集,excel数据,前7列输入,最后1列输出,主程序运行即可,所有文件放在一个文件夹; 5.命令窗

    2024年02月16日
    浏览(52)
  • 基于回归模型(贝叶斯岭回归、XGB、SVR等)销售额预测

    博主在之前也写过较多的预测模型的文章,主要是基于LSTM,见下: 使用 Conv1D-LSTM 进行时间序列预测:预测多个未来时间步【优化】 使用 Conv1D-LSTM 进行时间序列预测:预测多个未来时间步 LSTM-理解 Part-1(RNN:循环神经网络) Python LSTM时序数据的预测(一些数据处理的方法)

    2024年02月02日
    浏览(41)
  • 机器学习:基于支持向量机(SVM)进行人脸识别预测

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 专栏案例:

    2024年01月23日
    浏览(50)
  • 回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测

    预测效果 基本介绍 MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测,输出为选择的特征序号 Chinese: Options:可用的选项即表示的涵义如下 -s svm类型:SVM设置类型(默认0) 0 – C-SVC 1 --v-SVC 2 – 一类SVM 3 – e -SVR 4 – v-SVR -t 核函

    2024年02月14日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包