Python回归预测建模实战-支持向量机预测房价(附源码和实现效

2022-10-27  本文已影响0人  V数据杂坛

机器学习在预测方面的应用,根据预测值变量的类型可以分为分类问题(预测值是离散型)和回归问题(预测值是连续型),前面我们介绍了机器学习建模处理了分类问题(具体见之前的文章),接下来我们以波斯顿房价数据集为例,做一个回归预测系列的建模文章。

实现功能:

使用sklearn提供的支持向量机回归(SVR)的API对波士顿房价数据集进行预测,并尝试将预测结果进行分析。

实现代码:

from sklearn.datasets import load_boston

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn import preprocessing

from sklearn.model_selection import cross_val_score

from sklearn import metrics

from sklearn.svm import SVR

# 辅助函数

def cross_val(model,X,Y):

    pred = cross_val_score(model, X, Y, cv=10)

    return pred.mean()

def print_evaluate(true, predicted):

    mae = metrics.mean_absolute_error(true, predicted)

    mse = metrics.mean_squared_error(true, predicted)

    rmse = np.sqrt(metrics.mean_squared_error(true, predicted))

    r2_square = metrics.r2_score(true, predicted)

    print('MAE:', mae)

    print('MSE:', mse)

    print('RMSE:', rmse)

    print('R2 Square', r2_square)

    print('__________________________________')

# 加载数据集

boston=load_boston()

df=pd.DataFrame(boston.data,columns=boston.feature_names)

df['target']=boston.target

#查看数据项

features=df[boston.feature_names]

target=df['target']

#数据归一化处理

min_max_scaler = preprocessing.MinMaxScaler()

features = min_max_scaler.fit_transform(features)

#数据集划分

split_num=int(len(features)*0.8)

X_train=features[:split_num]

Y_train=target[:split_num]

X_test=features[split_num:]

Y_test=target[split_num:]

#支持向量机建模

svm_reg = SVR(kernel='rbf', C=30, epsilon=0.01)

print(cross_val(svm_reg,X_train, Y_train))

svm_reg.fit(X_train, Y_train)

test_pred = svm_reg.predict(X_test)

train_pred = svm_reg.predict(X_train)

print('Test set evaluation:\n_____________________________________')

print_evaluate(Y_test, test_pred)

print('Train set evaluation:\n_____________________________________')

print_evaluate(Y_train, train_pred)

# 可视化部分

sns.set(font_scale=1.2)

plt.rcParams['font.sans-serif']='SimHei'

plt.rcParams['axes.unicode_minus']=False

plt.rc('font',size=14)

plt.plot(list(range(0,len(X_test))),Y_test,marker='o')

plt.plot(list(range(0,len(X_test))),test_pred,marker='*')

plt.legend(['真实值','预测值'])

plt.title('Boston房价支持向量机预测值与真实值的对比')

plt.show()

实现效果:

关注V订阅号:数据杂坛,即可在后台联系我获取相关数据集和源码,送有关数据分析、数据挖掘、机器学习、深度学习相关的电子书籍。

上一篇 下一篇

猜你喜欢

热点阅读