(python 作业)线性回归预测房价

1.神经元模型

为只讨论房屋的面积,所以构造的神经元模型标量表达式为:f ( x ) = w × x + b 根据自变量与因变量,建立一元线性回归方程:y = w x + b + ε (ε作为观测误差)

2.误差函数

我们使用均方误差作为误差函数

误差函数

 然后我们需要找到一组最优的参数w , b  使得函数的值最小

3.梯度下降法

因为梯度的方向就是函数变化最快的方向。对w  , b不断地迭代更新,直到找到使均方误差最小。也就是对这个方程式对w求偏导数,在对b求偏导数。

在这里插入图片描述

 α在梯度下降法中称为学习率或者步长

import numpy as np
import random
# 构建数据集
data=[]
for i in range(30):
    area=random.uniform(60,100)
    easp1=random.uniform(1.2,2.0)
    easp2=random.uniform(0.1,0.2)
    prinse=area*easp1+easp2
    data.append([area,prinse])
data=np.array(data) # 数据集创建完毕 2维数组 [面积,房价]
#1.函数方法
def change(b, w, data, a):
    b_change = 0
    w_change = 0
    size = float(len(data))
    for i in range(0, len(data)):
        x = data[i, 0]
        y = data[i, 1]
        # 计算梯度
        b_change += (2 / size) * ((w * x + b) - y)
        w_change += (2 / size) * x * ((w * x + b) - y)
        # 根据梯度更新权重和偏置
    b -= a * b_change
    w -= a * w_change
    return [b,w]
# 梯度下降法
def come():
    b=0
    w=0
    a=0.00001
    for num in range(100):
        [b,w]=change(b,w,data,a)
    print([b,w])
come()
#2.面向对象方法
class Predict():
    def __init__(self):
        self.b=0
        self.w=0
        self.a=0.00001
        self.num=100
    def charge(self):
       b_change = 0
       w_change = 0
       size = float(len(data))
       for i in range(0, len(data)):
           x = data[i, 0]
           y = data[i, 1]
           b_change += (2 / size) * ((self.w * x + self.b) - y)
           w_change += (2 / size) * x * ((self.w * x + self.b) - y)
       self.b -= self.a * b_change
       self.w -= self.a * w_change
    def come(self):
        for num in range(self.num):
            self.charge()
        print([self.b,self.w])
predict=Predict()
predict.come()

(python 作业)线性回归预测房价_第1张图片

 

你可能感兴趣的:(python,线性回归,开发语言)