900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附

机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附

时间:2024-04-03 11:16:28

相关推荐

机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附

数据集和源码请点赞关注收藏后评论区留下QQ邮箱或者私信

线性回归是利用最小二乘函数对一个或多个因变量之间关系进行建模的一种回归分析,这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个变量的称为一元回归,大于一个变量的情况叫做多元回归。利用线性回归,我们可以预测一组特定数据是否在一定时期内增长或下降。

接下来以线性回归预测波士顿房价进行实战解析

线性回归代码如下

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_split# 读数据data = np.loadtxt(boston_house_price.csv', float, delimiter=",", skiprows=1)X, y = data[:, :13], data[:, 13]# Z-score归一化for i in range(X.shape[1]):X[:, i] = (X[:, i] - np.mean(X[:, i])) / np.std(X[:, i])# 划分训练集、测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 将训练集、测试集改为列向量的形式y_train = y_train.reshape((-1, 1))y_test = y_test.reshape((-1, 1))# 初始化模型参数def initialize_params(feature_num):w=np.random.rand(feature_num,1)b=0return w,bdef forward(X, y, w, b):num_train=X.shape[0]y_hat=np.dot(X,w)+bloss=np.sum((y_hat-y)**2)/num_traindw=np.dot(X.T,(y_hat-y))/num_traindb=np.sum((y_hat-y))/num_trainreturn y_hat,loss,dw,db# 定义线性回归模型的训练过程def my_linear_regression(X, y, learning_rate, epochs):loss_his=[]w,b=initialize_params(X.shape[1])for i in range(epochs):y_hat,loss,dw,db=forward(X,y,w,b)w+=-learning_rate*dwb+=-learning_rate*dbloss_his.append(loss)if i%100==0:print("epochs %d loss %f"%(i,loss))return loss_his,w,b# 线性回归模型训练loss_his, w, b = my_linear_regression(X_train, y_train, 0.01, 5000)# 打印loss曲线plt.plot(range(len(loss_his)), loss_his, linewidth=1, linestyle="solid", label="train loss")plt.show()# 打印训练后得到的模型参数print("w:", w, "\nb", b)# 定义MSE函数def MSE(y_test, y_pred):return np.sum(np.square(y_pred - y_test)) / y_pred.shape[0]# 定义R系数函数def r2_score(y_test, y_pred):# 测试集标签均值y_avg = np.mean(y_test)# 总离差平方和ss_tot = np.sum((y_test - y_avg) ** 2)# 残差平方和ss_res = np.sum((y_test - y_pred) ** 2)# R计算r2 = 1 - (ss_res / ss_tot)return r2# 在测试集上预测y_pred = np.dot(X_test, w) + b# 计算测试集的MSEprint("测试集的MSE: {:.2f}".format(MSE(y_test, y_pred)))# 计算测试集的R方系数print("测试集的R2: {:.2f}".format(r2_score(y_test, y_pred)))

损失值随训练次数的变化图如下 可以看出符合肘部方法

接下来可视化分析影响房价的因素

"""各个字段的含义:CRIM犯罪率ZN住宅用地所占比例INDUS城镇中非商业用地所占比例CHAS是否处于查尔斯河边NOX一氧化碳浓度RM住宅房间数AGE1940年以前建成的业主自住单位的占比DIS距离波士顿5个商业中心的加权平均距离RAD距离高速公路的便利指数TAX不动产权税PTRATIO学生/教师比例B黑人比例LSTAT低收入阶层占比MEDV房价中位数"""

可视化结果如下

可视化部分代码如下

import pandas as pdimport numpy as npimport seaborn as snsimport matplotlib.pyplot as pltdf=pd.read_csv(boston_house_price.csv',encoding='utf-8')print(df.head())df.describe()df['medv'].hist()sns.boxplot(x=df['medv'])#有点问题 要加个x传参plt.scatter(df['rm'],df['medv'])def box_plot_outliers(df,s):q1,q3=df[s].quantile(0.25),df[s].quantile(0.75)iqr=q3-q1low,up=q1-1.5*iqr,q3+1.5*iqrdf=df[(df[s]>up)|(df[s]<low)]return dfdf_filter=box_plot_outliers(df,'rm')df_filter.mean()plt.scatter(df['dis'],df['medv'])plt.scatter(df['rad'],df['medv'])plt.scatter(df['b'],df['medv'])df.corr()plt.style.use({'figure.figsize':(15,10)})df.hist(bins=15)sns.boxplot(data=df)plt.figure(figsize=(12,22))for i in range(13):plt.subplot(4,4,(i+1))plt.scatter(df.iloc[:,i],df['medv'])plt.title('{}-price scatter'.format(df.columns[i]))plt.xlabel(df.columns[i])plt.ylabel('boston house price')plt.show()plt.tight_layout()

数据集和源码请点赞关注收藏后评论区留下QQ邮箱或者私信

机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附源码 超详细)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。