Python机器学习房价预测

·输入数据只有一维:房子的面积
·目标的数据只有一维:房子的价格
根据已知房子的面积和价格进行机器学习模型预测

1.1、获取数据

可以从网上找,txt、word格式保存;通过相关网址和平台获取;
导入数据包

1.2、处理数据

需要标准化数据X=(X-aver(sum(Xi)))/std(Xi)
目的是方便图像显示

步骤①数据获取与处理

# 导入需要用到的库
import numpy as np
import matplotlib.pyplot as plt
# 定义存储输入数据(x)和目标数据(y)的数组
x, y = [], []
# 遍历数据集,变量sample对应的正是一个个样本
for sample in open("C:\\Users\\86132\\Desktop\\house_prices.txt", 'r'): # 根据自身更换
    _x, _y = sample.split(",")# 由于数据是用逗号隔开的,所以调用Python中的split方法,以逗号(,)为分割,逗号前赋值给_x,逗号后赋值给_y
    # 将字符串数据转化为浮点数,并依次添加到列表x和y的最后
    x.append(float(_x))
    y.append(float(_y))
# 读取完数据后,将他们转化为Numpy数组以方便进一步的处理
x, y = np.array(x), np.array(y)
# 标准化
x = (x - x.mean()) / x.std()#mean:求取均值,无参数;std:标准差
# 将原始数据集以散点的形式画出
plt.figure()
plt.scatter(x, y, c="g", s=6)
plt.show()

在这里插入图片描述
横轴是标准化之后的面积,纵轴是房子的价格

关于标准差:

在统计学中,多年的经验总结出:
如是总体,标准差公式根号内除以 n,
如是样本,标准差公式根号内除以 (n-1),
因为我们大量接触的是样本,所以普遍使用根号内除以(n-1)。
在这里插入图片描述
公式意义 :所有数减去平均值,它的平方和除以数的个数(或个数减一),再把所得值开根号,就是1/2次方,得到的数就是这组数的标准差。

步骤②选择与训练模型
在处理数据之后,下一步选择相应的学习方法和模型
在这个例子中,可以通过可视化原始数据,可以非常直观的感受到:很有可能通过线性回归(Linear Regression)中的多项式拟合来得到一个不错的结果。其数学表达式如下:
在这里插入图片描述
f(x|p;n)就是我们的模型,p、n是模型参数,p是多项式f的各个系数,n是多项式次数。
在这里插入图片描述
L(p;n)是模型的损失函数(平方损失),也就是所谓的欧氏距离(或说是向量的二范数)。

我们的目的是使L(p;n)最小,这样的模型是最优的。

模型损失函数是平方损失函数也就是所谓的欧式距离,这里的目的是要将损失函数最小化
利用Numpy训练和优化

# (-2,4)这个区间上取100个点作为画图的基础
x0 = np.linspace(-2, 4, 100)#等差数列
# 利用Numpy的函数定义训练并返回多项式回归模型的次数
# deg参数代表着模型参数中的n,即模型中多项式的次数
# 返回的模型能够根据输入的x(默认是x0),返回预测的y
# lambda函数为匿名函数

#理解该训练模块:np.polyfit(x, y, deg)代表通过x,y和deg拟合出一个多项式函数,np.polyval(np.polyfit(x, y, deg), input_x)表示通过此拟合出的多项式函数和input_x(即x0)输出返回x0对应的y值。:之前的内容,表示后面的式子成立条件

def get_model(deg):
    return lambda input_x=x0: np.polyval(np.polyfit(x, y ,deg), input_x)

步骤③评估与显示
多项式拟合,采用n=1,4,10进行评估
不需要进行交叉验证因为数据太少了
我们训练的目的是最小化损失函数,所以用损失函数来衡量模型的好坏

# 根据参数n、输入的x,y返回相对应的损失
#理解该计算损失函数模块:get_model(deg)()默认表示输入为input_x=x0,get_model(deg)(input_x)表示输入为input_x的矩阵得到对应输出预测y的矩阵,(get_model(deg)(input_x) - input_y)通过拟合函数计算得到的预测y的矩阵和实际y的矩阵相减,最终式子返回损失函数的值。

def get_cost(deg, input_x,input_y):
    return 0.5 * ((get_model(deg)(input_x) - input_y) ** 2).sum()
# 定义测试函数集并根据它进行各种实验
test_set = (1, 4, 10)
for d in test_set:
    # 输出损失
    print(get_cost(d, x, y))
# 画出相应的图像
plt.scatter(x, y, c="g", s=20)
for d in test_set:
    plt.plot(x0, get_model(d)(), label="degree = {}".format(d))
# 将横轴和纵轴的范围分别限制在(-2,4)和(10^5,10^6)
plt.xlim(-2, 4)
plt.ylim(1e5, 1e6)
# 调用legend方法使曲线对应的label正确显示
plt.legend()
plt.show()

在这里插入图片描述
当n=4和10时出现过拟合现象,因此n=1是预测较好的模型
完整代码

# 导入需要用到的库
import numpy as np
import matplotlib.pyplot as plt

# 定义存储输入数据(x)和目标数据(y)的数组
x, y = [], []
# 遍历数据集,变量sample对应的正是一个个样本
for sample in open("C:\\Users\\86132\\Desktop\\house_prices.txt", 'r'):
    _x, _y = sample.split(",")
    # 将字符串数据转化为浮点数
    x.append(float(_x))
    y.append(float(_y))
# 读取完数据后,将他们转化为Numpy数组以方便进一步的处理
x, y = np.array(x), np.array(y)
# 标准化
x = (x - x.mean()) / x.std()
# 将原始数据集以散点的形式画出
plt.figure()
plt.scatter(x, y, c="g", s=6)
plt.show()
# (-2,4)这个区间上取100个点作为画图的基础
x0 = np.linspace(-2, 4, 100)
# 利用Numpy的函数定义训练并返回多项式回归模型的次数
# deg参数代表着模型参数中的n,即模型中多项式的次数
# 返回的模型能够根据输入的x(默认是x0),返回预测的y
def get_model(deg):
    return lambda input_x=x0: np.polyval(np.polyfit(x, y ,deg), input_x)
# 根据参数n、输入的x,y返回相对应的损失
def get_cost(deg, input_x,input_y):
    return 0.5 * ((get_model(deg)(input_x) - input_y) ** 2).sum()
# 定义测试函数集并根据它进行各种实验
test_set = (1, 4, 10)
for d in test_set:
    # 输出损失
    print(get_cost(d, x, y))
# 画出相应的图像
plt.scatter(x, y, c="g", s=20)
for d in test_set:
    plt.plot(x0, get_model(d)(), label="degree = {}".format(d))
# 将横轴和纵轴的范围分别限制在(-2,4)和(10^5,10^6)
plt.xlim(-2, 4)
plt.ylim(1e5, 1e6)
# 调用legend方法使曲线对应的label正确显示
plt.legend()
plt.show()

数据集
在桌面创建txt文件,注意代码中的路径

house_prices.txt

150,399900
160,329900
240,369000
116,232000
300,539900
198,299900
153,314900
147,198999
138,212000
149,242500
194,239999
200,347000
189,329999
447,699900
128,259900
230,449900
132,299900
123,199900
260,499998
301,599000
176,252900
188,255000
160,242900
192,259900
389,573900
110,249900
145,464500
256,469000
220,475000
263,299900
183,349900
100,169900
204,314900
313,579900
181,285900
143,249900
123,229900
213,345000
421,549000
216,287000
166,368500
223,329900
256,314000
120,299000
852,179900
185,299900
123,239500

笔记

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习房价预测模型是通过对输入的数据集进行特征工程和训练回归模型来预测房价。下面是一个简单的演示例子[^1][^2]: 1. 数据准备:将数据集分为训练集和测试集,并剔除离群样本。 2. 特征工程:对数据进行特征选择、特征变换和特征生成等操作,以提取出对房价预测有用的特征。 3. 训练回归模型:选择适合的回归模型,如线性回归、决策树回归、随机森林回归等,并使用训练集进行模型训练。 4. 模型评估:使用测试集评估模型的性能,常用的评估指标包括均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)等。 下面是一个简单的示例代码: ```python # 导入所需库 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 读取数据集 data = pd.read_csv('house_prices.csv') # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data.drop('price', axis=1), data['price'], test_size=0.2, random_state=42) # 训练线性回归模型 model = LinearRegression() model.fit(X_train, y_train) # 预测房价 y_pred = model.predict(X_test) # 评估模型 mse = mean_squared_error(y_test, y_pred) print("均方误差:", mse) ``` 通过以上步骤,我们可以得到一个机器学习房价预测模型,并使用均方误差作为评估指标来评估模型的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值