house price

# 导入库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import seaborn as sns #Seaborn是基于matplotlib的Python可视化库。
# 加载数据集
data = pd.read_csv('./housing_price.csv',sep = ',',encoding = 'utf-8') #加载数据
plt.rcParams['font.sans-serif'] = 'SimHei'#设置字体为SimHei显示中文
plt.rcParams['axes.unicode_minus']=False#坐标轴刻度显示负号
plt.rc('font', size=14)#设置图中字号大小
# 用热力图绘制关联矩阵,查看房屋属性之间的相关系数
plt.figure(figsize=(12,8))
sns.heatmap(data.corr(), annot=True, fmt='.2f', cmap='PuBu')
# 通过dataframe的loc方法取出size特征和标签Price,但是注意,如果要放入scikit-learn中的模型拟合数据的话,特征必须是向量,X非向量,需要进行转换
X = data.loc[: ,'size']
y = data.loc[: ,'Price']
X = np.array(X).reshape(-1,1)
# 调用线性回归模型,训练数据,依据模型预测房价,并显示,红色点为预测值,蓝色的点为原始值。
LR1 = LinearRegression()
LR1.fit(X,y)
y_pre=LR1.predict(X)
plt.scatter(X,y)
plt.plot(X,y_pre,'r')
plt.xlabel('size')
plt.ylabel('real price')
plt.show()
#计算一元线性回归模型 MES和R2_score指标
from sklearn.metrics import mean_squared_error,r2_score
mean_squared_error_1 = mean_squared_error(y,y_pre)
r2_score_1 = r2_score(y,y_pre)
print('MSE:{:.4f}'.format(mean_squared_error_1))
print('R2_SCORE:{:.4f}'.format(r2_score_1))
#计算打印一元线性回归模型 回归系数和截距
print('回归系数为:',LR1.coef_)
print('截距为:',LR1.intercept_)
# 加载数据,将原始数据划分为训练集和测试集,建立回归模型,训练数据,预测测试集数据。
X ,y = data[data.columns.delete(-1)], data['Price']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=888)
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)
coef = linear_model.coef_ #回归系数
# 打印回归方程
print('回归方程为:\n','y=',coef[0],'*x0+',
      coef[1],'*x1+',coef[2],'*x2+',coef[3],'*x3+',coef[4],'*x4+',linear_model.intercept_)
line_pre = linear_model.predict(X_test)
print('R2_SCORE:{:.4f}'.format(linear_model.score(X_test, y_test)))
print('MSE:{:.4f}'.format(np.sqrt(mean_squared_error(y_test,line_pre))))
plt.scatter(y_test, line_pre,label='y')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4,label='predicted')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值