当前位置:   article > 正文

Python数据分析-房价预测及模型分析_房价预测模型python

房价预测模型python

摘 要

Python数据分析-房价的影响因素图解icon-default.png?t=L892https://blog.csdn.net/weixin_42341655/article/details/120299008?spm=1001.2014.3001.5501

上一篇OF讲述了房价的影响因素,主要是房屋面积、卫生间数、卧室数。今天,我们通过建立模型来预测房价。机器学习中关于回归算法-数据发展的预测,包含了几个模型:

1、线性回归;

2、岭回归;

3、Lasso回归;

4、多项式回归。

线性回归

线性回归的公式很简单y=ax+b(a是系数,b是截距),OF借这个简单的公式来介绍下机器学习的过程。

1、定义训练集、测试集;

2、选择模型;

3、训练模型;

4、预测和推断。

  1. import numpy as np
  2. import pandas as pd
  3. from sklearn.model_selection import train_test_split
  4. from sklearn import linear_model
  5. import tkinter as tk
  6. df = pd.read_csv(r"./data/house_data.csv")
  7. #定义训练集、测试集
  8. train_data,test_data = train_test_split(df,train_size = 0.8,random_state=3)
  9. #定义训练数据列
  10. X_train = np.array(train_data['square'], dtype=pd.Series).reshape(-1,1)
  11. y_train = np.array(train_data['price'], dtype=pd.Series)
  12. #定义测试数据列
  13. X_test = np.array(test_data['square'], dtype=pd.Series).reshape(-1,1)
  14. y_test = np.array(test_data['price'], dtype=pd.Series)
  15. #选择模型
  16. lr = linear_model.LinearRegression()
  17. # 训练模型
  18. lr.fit(X_train,y_train)
  19. #预测、推断
  20. pred = lr.predict(X_test)

我们来看下预测模型的线性回归是一条怎样的线(下图红色线):

  1. #图表显示
  2. plt.scatter(X_test, y_test)
  3. plt.plot(X_test,pred,color='r')
  4. plt.show()

从肉眼上看,这条线性回归效果似乎并不太理想,我们用数据说话,计算下该模型的评分如何。我们一般用以下指标来衡量模型的好坏:R2(决定系数)、RMSE(均方根误差)、cv(K折交叉验证系数)。我们先看下该模型的R2评分如何:

  1. #计算模型评分
  2. X = np.array(df['square']).reshape(-1,1)
  3. print(lr.score(X,df['price']))

计算结果:

0.4928363894587906

R2分数越高,说明模型的准确率越高,低于50%的准确率,模型确实不太理想啊。但既然做出来了,我们用该模型预测下房价。

  1. #计算系数和截距
  2. intercept=float(lr.intercept_)
  3. coef=float(lr.coef_)
  4. print ("Average Price for Test Data: {:.3f}".format(y_test.mean()))
  5. print('Intercept: {}'.format(intercept))
  6. print('Coefficient: {}'.format(coef))
  7. # 第1步,实例化object,建立窗口window
  8. window = tk.Tk()
  9. # 第2步,给窗口的可视化起名字
  10. window.title('房价预测计算器-线性回归')
  11. # 第3步,设定窗口的大小(长 * 宽)
  12. window.geometry('500x300') # 这里的乘是小x
  13. # 第4步,在图形界面上设定输入框控件entry框并放置
  14. a = tk.Label(window, text="房屋面积:")
  15. a.place(x='30',y='50',width='80',height='40')
  16. e = tk.Entry(window, show = None)#显示成明文形式
  17. e.place(x='120',y='50',width='180',height='40')
  18. # 第5步,定义触发事件
  19. def calculate(): # 在鼠标焦点处插入输入内容
  20. var = e.get()
  21. ans = coef*float(var)+intercept
  22. ans = '%.2f'%ans
  23. result.set(str(ans))
  24. # 第6步,创建并放置一个按钮
  25. b1 = tk.Button(window, text='预测房价', width=10, height=2, command=calculate)
  26. b1.place(x='320',y='50',width='100',height='40')
  27. # 第7步,创建并放置一个多行文本框text用以显示
  28. w = tk.Label(window, text="预测房价(万元):")
  29. w.place(x='50',y='150',width='120',height='50')
  30. result = tk.StringVar()
  31. show_dresult = tk.Label(window, bg='white',fg = 'black',font = ('Arail','16'),bd='0',textvariable=result,anchor='e')
  32. show_dresult.place(x='200',y='150',width='250',height='50')
  33. # 第8步,主窗口循环显示
  34. window.mainloop()

岭回归

线性回归呈现了房价与房屋面积的关系,但实际上,房价的影响因素可不止面积,还有卫生间数量和卧室数量,当然还有其他一些特征。我们本次用这3个特征进行岭回归预测。岭回归的公式:

  1. import pandas as pd
  2. from sklearn.model_selection import train_test_split
  3. from sklearn import linear_model
  4. import tkinter as tk
  5. df_dm = pd.read_csv(r"./data/house_data.csv")
  6. train_data_dm, test_data_dm = train_test_split(df_dm,train_size = 0.8,random_state=3)
  7. features = ['square','bathrooms','bedrooms']
  8. complex_model_R = linear_model.Ridge(alpha=100)
  9. complex_model_R.fit(train_data_dm[features],train_data_dm['price'])
  10. pred1 = complex_model_R.predict(test_data_dm[features])
  11. intercept=float(complex_model_R.intercept_)
  12. coef=list(complex_model_R.coef_)
  13. print('Intercept: {}'.format(intercept))
  14. print('Coefficients: {}'.format(coef))
  15. #计算模型评分
  16. print(complex_model_R.score(df_dm[features],df_dm['price']))
  17. # 第1步,实例化object,建立窗口window
  18. window = tk.Tk()
  19. # 第2步,给窗口的可视化起名字
  20. window.title('房价预测计算器-岭回归')
  21. # 第3步,设定窗口的大小(长 * 宽)
  22. window.geometry('500x350') # 这里的乘是小x
  23. # 第4步,在图形界面上设定输入框控件entry框并放置
  24. a = tk.Label(window, text="房屋面积:")
  25. a.place(x='30',y='50',width='80',height='40')
  26. e = tk.Entry(window, show = None)#显示成明文形式
  27. e.place(x='120',y='50',width='180',height='40')
  28. b = tk.Label(window, text="卫生间数:")
  29. b.place(x='30',y='120',width='80',height='40')
  30. f = tk.Entry(window, show = None)#显示成明文形式
  31. f.place(x='120',y='120',width='180',height='40')
  32. c = tk.Label(window, text="卧室数:")
  33. c.place(x='30',y='190',width='80',height='40')
  34. g = tk.Entry(window, show = None)#显示成明文形式
  35. g.place(x='120',y='190',width='180',height='40')
  36. # 第5步,定义触发事件
  37. def calculate(): # 在鼠标焦点处插入输入内容
  38. var1 = e.get()
  39. var2 = f.get()
  40. var3 = g.get()
  41. ans = coef[0]*float(var1)+coef[1]*float(var2)+coef[2]*float(var3)+intercept
  42. ans = '%.2f'%ans
  43. result.set(str(ans))
  44. # 第6步,创建并放置一个按钮
  45. b1 = tk.Button(window, text='预测房价', width=10, height=2, command=calculate)
  46. b1.place(x='350',y='120',width='100',height='40')
  47. # 第7步,创建并放置一个多行文本框text用以显示
  48. w = tk.Label(window, text="预测房价(万元):")
  49. w.place(x='30',y='250',width='120',height='50')
  50. result = tk.StringVar()
  51. show_dresult = tk.Label(window, bg='white',fg = 'black',font = ('Arail','16'),bd='0',textvariable=result,anchor='e')
  52. show_dresult.place(x='200',y='250',width='250',height='50')
  53. # 第8步,主窗口循环显示
  54. window.mainloop()

该模型计算得到的评分稍微要高一些:

0.5068817650838495

我们用该模型预测的房价结果:

Lasso回归

1)Lasso回归的公式:

2)岭回归与Lasso回归的公式是相同的,Lasso回归与岭回归的区别在于:

Many small/medium sized effects: 使用(Ridge)岭回归

Only a few variables with medium/large effect: 使用Lasso回归

3)岭回归也称为L2 正则化,Lasso回归也称为L1正则化

岭回归与Lasso回归最大的区别在于岭回归引入的是L2范数惩罚项,Lasso回归引入的是L1范数惩罚项,Lasso回归能够使得损失函数中的许多θ均变成0,这点要优于岭回归,因为岭回归是要所有的θ均存在的,这样计算量Lasso回归将远远小于岭回归。

Lasso回归最终会趋于一条直线,原因就在于好多θ值已经均为0,而岭回归却有一定平滑度,因为所有的θ值均存在。

模型评分:0.5067363047097421,并不比岭回归高。

多项式回归

多项式回归的公式:

 

该模型OF就不过多介绍了,我们的数据集并不太适合,大家想练习下,可以自行尝试下。

结 语

OF主要介绍了3种模型进行房价预测:线性回归、岭回归、Lasso回归。希望大家能够了解机器语言在生活中的应用场景,活学活用,利用学习到的知识解决些生活/工作中的问题。机器学习大概需要学习以下内容:

1、回归算法:数据发展预测

线性回归、多项式回归

2、分类、聚类算法:预测数据类别

二/多项式分类

KNN、SVM、朴素贝叶斯分类

K-means聚类

3、决策树、随机森林算法:数据分类

Boost、GBDT、XGBOOST

4、NLP自然语言

5、深度学习

NN:神经网络

CNN:卷积神经网络

RNN:循环神经网络

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号