线性模型 线性回归小试 python房价预测模型(单特征)

1.文件  (singleFeature.txt)

6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705

2.代码(因为数据集本身没有排序,故未随机分开)

import matplotlib.pyplot as plt
import numpy as np

# y=wx+b
f = open('singleFeature.txt', 'r')  # 读文件
x = []
y = []
while 1:
    yihang = f.readline()
    if len(yihang) <= 1:
        break
    fenkai = yihang.split(',')
    fenkai[0] = eval(fenkai[0])
    fenkai[1] = eval(fenkai[1])
    x.append(fenkai[0])
    y.append(fenkai[1])
plt.figure(1)  # 绘制散点图1  全部训练+测试
plt.scatter(x, y, )
plt.xlabel('x')
plt.ylabel('y')
plt.title('')
x0 = sum(x) / len(x)  # x平均
y0 = sum(y) / len(y)  # y平均
w1 = w2 = w3 = 0
for i in range(len(x)):
    w1 += y[i] * (x[i] - x0)
    w2 += x[i] * x[i]
    w3 += x[i]
w3 = w3 * w3 / len(x)
w = w1 / (w2 - w3)  # 计算w
b = 0
for i in range(len(x)):
    b += y[i] - (w * x[i])
b /= len(x)  # 计算b
error = 0
for i in range(len(x)):
    error += (w * x[i] + b - y[i]) ** 2
error /= len(x)  # 计算均方误差
print('w1 = ', w, ',b1 = ', b, '误差1 = ', error)
xl = np.arange(5, 25, 0.1)  # 绘制回归直线
yl = w * xl + b
plt.plot(xl, yl, 'r')

plt.figure(2)  # 绘制散点图2  分开训练+测试
x1 = x[0:60]
y1 = y[0:60]
x2 = x[60:len(x)]
y2 = y[60:len(y)]
plt.scatter(x1, y1, c='b')  # 测试点
plt.scatter(x2, y2, c='g')  # 训练点
plt.xlabel('x')
plt.ylabel('y')
plt.title('')
x0 = sum(x1) / len(x1)  # x平均
y0 = sum(y1) / len(y1)  # y平均
w1 = w2 = w3 = 0
for i in range(len(x1)):
    w1 += y1[i] * (x1[i] - x0)
    w2 += x1[i] * x1[i]
    w3 += x1[i]
w3 = w3 * w3 / len(x1)
w = w1 / (w2 - w3)  # 计算w
b = 0
for i in range(len(x1)):
    b += y1[i] - (w * x1[i])
b /= len(x1)  # 计算b
error = 0
for i in range(len(x2)):
    error += (w * x2[i] + b - y2[i]) ** 2
error /= len(x2)  # 计算均方误差
print('w2 = ', w, ',b2 = ', b, '误差2 = ', error)
xl = np.arange(5, 25, 0.1)  # 绘制回归直线
yl = w * xl + b
plt.plot(xl, yl, 'r')
plt.show()  # 显示图像

3.结果

很巧合,训练样本少的误差低。

 欢迎指正。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值