【Python机器学习系列】一文教你建立SVR模型预测房价(源码)

liftword5个月前 (01-10)技术文章44

这是我的第270篇原创文章。

一、引言

对于表格数据,一套完整的机器学习建模流程如下:

针对不同的数据集,有些步骤不适用,其中橘红色框为必要步骤,欢迎大家关注翻看我之前的一些相关文章。前面我介绍了机器学习模型的二分类任务,接下来做一个机器学习模型的回归任务系列,由于本系列案例数据质量较高,有些步骤跳过了,跳过的步骤将单独出文章总结!在Python中,可以使用Scikit-learn库来构建SVR回归模型进行预测,本文以预测房价为例,对这个过程做一个简要解读。

二、实现过程

2.1 读取数据

filename = 'data.csv'
dataset = pd.read_csv(filename, names=names, delim_whitespace=True)
df = pd.DataFrame(dataset)

df:

2.2 数据集划分

features = names[:-1]
target = ['MEDV']
#  划分数据集
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

2.3 数据归一化

mm1 = MinMaxScaler()   # 特征进行归一化
X_train_m = mm1.fit_transform(X_train)
mm2 = MinMaxScaler()     # 标签进行归一化
y_train_m = mm2.fit_transform(y_train)

2.4 建模预测

model = SVR()
X_test_m = mm1.transform(X_test) # 注意fit_transform() 和 transform()的区别
y_test_pred_m = model.predict(X_test_m)

2.5 结果可视化

# 训练集预测值与真实值的对比
plt.plot(list(range(0,len(X_train))),y_train,marker='o')
plt.plot(list(range(0,len(X_train))),y_train_pred,marker='*')
plt.legend(['真实值','预测值'])
plt.xlabel('序列')
plt.ylabel('房价')
plt.title('训练集预测值与真实值的对比')
plt.show()

结果:

# 验证集预测值与真实值的对比
plt.plot(list(range(0,len(X_test))),y_test,marker='o')
plt.plot(list(range(0,len(X_test))),y_test_pred,marker='*')
plt.legend(['真实值','预测值'])
plt.xlabel('序列')
plt.ylabel('房价')
plt.title('验证集预测值与真实值的对比')
plt.show()

结果:

2.6 评价指标

# 评价指标
trainScore1 = math.sqrt(mean_squared_error(y_train, y_train_pred))
print('Train Score: %.2f RMSE' % (trainScore1))
testScore1 = math.sqrt(mean_squared_error(y_test, y_test_pred))
print('Test Score: %.2f RMSE' % (testScore1))

trainScore2 = mean_absolute_error(y_train, y_train_pred)
print('Train Score: %.2f MAE' % (trainScore2))
testScore2 = mean_absolute_error(y_test, y_test_pred)
print('Test Score: %.2f MAE' % (testScore2))

trainScore3 = r2_score(y_train, y_train_pred)
print('Train Score: %.2f R2' % (trainScore3))
testScore3 = r2_score(y_test, y_test_pred)
print('Test Score: %.2f R2' % (testScore3))

trainScore4 = mean_absolute_percentage_error(y_train, y_train_pred)
print('Train Score: %.2f MAPE' % (trainScore4))
testScore4 = mean_absolute_percentage_error(y_test, y_test_pred)
print('Test Score: %.2f MAPE' % (testScore4))

结果打印:

作者简介: 读研期间发表6篇SCI数据算法相关论文,目前在某研究院从事数据算法相关研究工作,结合自身科研实践经历持续分享关于Python、数据分析、特征工程、机器学习、深度学习、人工智能系列基础知识与案例。关注gzh:数据杂坛,获取数据和源码学习更多内容。

原文链接:

【Python机器学习系列】一文教你建立SVR模型预测房价(案例+源码)

相关文章

【Python可视化系列】一文教你绘制不同类型散点图(理论+源码)

这是Python可视化系列原创文章。一、引言前文相关回顾:【Python可视化系列】一文教会你绘制美观的热力图(理论+源码)【Python可视化系列】一文教会你绘制美观的直方图(理论+源码)【Pyth...

【Python时序预测系列】一文搞明白时序数据输入到LSTM模型的格式

这是我的第276篇原创文章。一、引言前面我介绍了多个方法实现单变量和多变量时序数据的单站点单步预测,好多小伙伴最近问我这个LSTM模型数据的输入的格式是怎么样的,今天我专门写一篇文章来聊一聊这个问题,...

一文带您了解随机梯度下降(SGD):python代码示例

在机器学习领域,梯度下降扮演着至关重要的角色。随机梯度下降(Stochastic Gradient Descent,SGD)作为一种优化算法,在机器学习和优化领域中显得尤为重要,并被广泛运用于模型训练...

Python数据清洗:处理缺失值、异常值和重复值

在Python数据分析中,数据清洗是一个非常重要的步骤。数据清洗包括处理缺失值、异常值和重复值,以及进行数据转换和归一化等操作。本文将介绍如何使用Python进行数据清洗,并提供相应的代码示例。1.缺...

如何提高PyTorch“炼丹”速度?这位小哥总结了17种方法

杨净 发自 凹非寺量子位 报道 | 公众号 QbitAI如何提升PyTorch“炼丹”速度?最近,有一位名叫Lorenz Kuhn的小哥,分享了他在炼丹过程中总结的17种投入最低、效果最好的提升训练速...

Python 卷积神经网络 ResNet的基本编写方法

ResNet(Residual Network)是由微软亚洲研究院提出的深度卷积神经网络,它在2015年的ImageNet挑战赛上取得了第一名的好成绩。ResNet最大的特点是使用了残差学习,可以解决...