python房价预测系统前端_Python机器学习实践(一)多项式拟合(简单房价预测)...

Python机器学习 学习笔记与实践

环境:win10 + Anaconda3.8

例子一 源自《Python与机器学习实战》—何宇健

任务:现有47个房子的面积和价格,需要建立一个模型对房价进行预测。

1、获取和处理数据

房子的面积与价格对应的数据点击下面获得:

点击此处获取

导入库,并读取文本文件的数据:

import numpy as np

import matplotlib.pyplot as plt

#读取房子面积和对应的价格数据

x,y=[],[]

for sample in open("此处为数据文本文件路径","r"): #文本文件中数据用“,”隔开,故向_x,_y传入数据时引入split函数 _x,_y=sample.split(",") #采用append方法将转换为float类型的_x,_y赋值给x,y x.append(float(_x)) y.append(float(_y))

#将x,y转换为Numpy数组

x,y=np.array(x),np.array(y)

#将x标准化

x=(x-x.mean())/x.std()1

2

3

4

5

6

7

8

9

10

11

12

13

14

(1)由于x,y的数据类型是List,故在保存简单的数值型数据时,处理不够高效,因此将其转换为Numpy数组。

(2)保留x的原始值也是可以的,但标准化后可以降低问题的复杂度。x标准化公式为:(x-x平均值)/ x的标准差

(3)在此也可以选择观察散点图,观察后发现数据很可能有线性关系,因此下面模型采用线性回归的多项式拟合。

2、多项式拟合

#利用linspace函数,产生-2到4之间的等间隔100个数

x0=np.linspace(-2,4,100)

#定义模型函数

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

#定义损失函数

def get_cost(deg,calcu_x,data_y): return 0.5*((get_model(deg)(calcu_x)-data_y)**2).sum()

#定义测试阶数集并分别计算不同阶模型的损失

test_set=(1,4,10)

for d in test_set: print('The loss of degree{} is {}'.format(d,get_cost(d,x,y)))

#画图

plt.figure()

plt.title('Easy example of the price of house')

#将原始数据画为散点图

plt.scatter(x,y,c="g",s=6)

#限定横纵坐标

plt.xlim(-2,4)

plt.ylim(1e5,8e5)

#分别画出不同阶模型的拟合曲线

for d in test_set: plt.plot(x0,get_model(d)(),label='degree={}'.format(d)) plt.legend()

plt.show()1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

(1)np.linspace简单用法:

np.linspace(a,b,num),生成a到b的等间隔的num个数

(2)polyfit函数简单讲解:

def polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

Least squares polynomial fit.

Fit a polynomial p(x) = p[0] * x**deg + … + p[deg] of degree deg to points (x, y). Returns a vector of coefficients p that minimises the squared error in the order deg, deg-1, … 0.

(3)polyval函数简单讲解:

def polyval(p, x)

Evaluate a polynomial at specific values.

If p is of length N, this function returns the value:

`p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]`1

If x is a sequence, then p(x) is returned for each element of x. If x is another polynomial then the composite polynomial p(x(t)) is returned.

(4)损失函数

损失函数采用常用的平方损失函数,即欧氏距离。

(5)注意:plt.show(),不要忘记括号。

3、运行结果

06073a8b04d18d4310825b9b0578cbfb.png

f01e68142ac88b903d22f1ca7eac597a.png

4、小结

从损失结果中看,阶数为1的时候损失最大,阶数为10的时候损失最小。但从图中看到,似乎当阶数等于1或4的时候能更好地描述这个模型,这就是过拟合现象。

文章来源: blog.csdn.net,作者:AiTingDeTong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/AiTingDeTong/article/details/111177749

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值