# 波士顿房价预测
# 防止警告出现
import warnings
warnings.filterwarnings("ignore")
# 引入数据基础包
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
import scipy.stats as st
import seaborn as sns
## 设置属性防止画面出现乱码
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 引入机器学习,预处理,模型选择,评估指标
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import r2_score
# 引入本次试验数据集
from sklearn.datasets import load_boston
# 引入算法
from sklearn.linear_model import RidgeCV, LassoCV, LinearRegression, ElasticNet
# 对比SVC,是svm的回归形式
from sklearn.svm import SVR
# 集成算法
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from xgboost import XGBRegressor
# 载入房价数据集
boston = load_boston()
# x是特征,y是标签
x = boston.data
y = boston.target
# 查看相关属性
print('特征的列名')
print(boston.feature_names)
print("样本数据量:%d, 特征个数:%d" % x.shape)
print("target样本数据量:%d" % y.shape[0])
# 转化为dataframe的形式
x = pd.DataFrame(boston.data, columns=boston.feature_names)
x.head()
# 对标签的分布进行可视化
sns.distplot(tuple(y), kde=False, fit=st.norm)
# 数据分割
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=28)
# 数据集标准化
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)
x_train[0:100]
# 模型的名字
names = ['LinerRegression',
'Ridge',
'Random Forrest',
'GBDT',
'Support Vector Regression',
'ElasticNet',
'XgBoost']
# 定义模型
models = [LinearRegression(),
RidgeCV(alphas=(0.001,0.1,1),cv=3), # 这里的cv指的是交叉验证的思想
LassoCV(alphas=(0.001,0.1,1),cv=5),
RandomForestRegressor(n_estimators=10),
GradientBoostingRegressor(n_estimators=30),
SVR(),
ElasticNet(alpha=0.001,max_iter=10000),
XGBRegressor()]
# 输出所有回归模型的R2评分
# 定义R2评分的函数
def R2(model,x_train,x_test,y_train,y_test):
model_fittesd = model.fit(x_train,y_train)
y_pred = model_fittesd.predict(x_test)
score = r2_score(y_test,y_pred)
return score
# 遍历所有模型进行评分
for name,model in zip(names,models):
score = R2(model,x_train,x_test,y_train,y_test)
print("{}:{:.6f},{:.4f}".format(name,score.mean(),score.std()))
# 模型构建
'''
'kernel': 核函数
'C':SVR的正则化因子,
'gamma':'rbf','poly'and'sigmoid'核函数的系数,影响模型性能
'''
parameters={
'kernel':['linear','rbf'],
'C':[0.1,0.5,0.9,1.5],
'gamma':[0.001,0.01,0.1,1]
}
# 使用网格搜索,以及交叉验证
model = GridSearchCV(SVR(),param_grid=parameters,cv=3)
model.fit(x_train,y_train)
## 获取最优参数
print("最优参数列表:",model.best_params_)
print("最优模型:",model.best_estimator_)
print("最优R2值:",model.best_score_)
## 可视化
ln_x_test = range(len(x_test))
y_predict = model.predict(x_test)
# 设置画布
plt.figure(figsize=(16,8),facecolor='W')
# 用红线画图
plt.plot(ln_x_test,y_test,'r-',lw=2,label=u'真实值')
# 用绿线画图
plt.plot(ln_x_test,y_predict,'g-',lw = 3,label=u'SVR算法估值,$R^2$=%.3f' % (model.best_score_))
# 图形显示
plt.legend(loc = 'upper left')
plt.grid(True)
plt.title(u"波士顿房价价格预测(SVM)")
plt.xlim(0, 101)
plt.show()
main1(波士顿房价预测).zip
需积分: 0 67 浏览量
2022-12-15
00:04:46
上传
评论
收藏 2KB ZIP 举报
vvlosersk
- 粉丝: 0
- 资源: 1
最新资源
- 基于Javascript和Vue的微信小程序抽奖打地鼠游戏设计源码 - 抽奖打地鼠
- 基于Python和Javascript的车展大屏演示前后端web应用设计源码 - autoshow
- 基于Javascript和微信小程序的Anna设计源码
- 基于Java的仿制品设计源码 - bilibili
- 基于Javascript的影视动画设计源码 - cad
- 基于Java和深度学习的瓦斯浓度预测系统后端设计源码 - 瓦斯浓度预测后端
- Screenshot_20240528_103010.jpg
- 基于Python的新能源承载力计算及界面设计源码 - HAINING-DG
- 基于Java的本科探索学习项目设计源码 - 本科探索
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈