一、Linear Regression学习小结

Linear Regression小结:

1.sklearn的linear_model

 

#pandas这里用来读取txt文本中的内容

import pandas as pd

#linear_model用来进行线性规划

from sklearn import linear_model

#matplotlib用来作图

import matplotlib.pyplot as plt #读取数据

#read_fwf读取固定长度的table或者格式化的行 到dataframe中

dataframe = pd.read_fwf('brain_body.txt')

#x_values是用来预测的数据,即根据x_values预测y 格式为[],不能是1维 必须是二维

x_values = dataframe[['Brain']]

#y_values是给定的被预测值,维度和x_values一致

y_values = dataframe[['Body']] #训练模型

#body_reg作为LinearRegression的实例化对象进行后续的fit和predict

body_reg = linear_model.LinearRegression()

#这一步即给定x和y,进行拟合,得到最优解

body_reg.fit(x_values, y_values)

#进行作图 #先把原来的x和y打成散点图

plt.scatter(x_values, y_values)

#将x和预测后的y做成直线,predict方法必须先进行拟合,得到的是y的组

plt.plot(x_values, body_reg.predict(x_values)) plt.show()

2.自己编写梯度下降的函数并用它进行线性回归

 
import numpy as np

class LinearRegressor:

#构造函数 传入四个参数

def __init__(self, num_iteration, learning_rate, initial_m, initial_b): self.num_iteration = num_iteration self.learning_rate = learning_rate self.m = initial_m self.b = initial_b

#梯度下降第一步计算

#m和b的取值为:m = m - 1/n * Σ 2 * x * (mx + b - y)
b = b - 1/n * Σ 2 * (mx + b - y)

    def compute_gradient(self, data):

#第一步 先计算Σ后面的total

total_gradient_m = 0 total_gradient_b = 0 for i in range(len(data)): x, y = data[i]

#mx + b根据定义 就是predict_y

predict_y = self.predict(x) gradient_m = 2 * x * (predict_y- y) gradient_b = 2 * (predict_y- y) total_gradient_m += gradient_m total_gradient_b += gradient_b

#计算平均的m和b 即减号后面的部分

average_gradient_m = total_gradient_m / float(len(data)) average_gradient_b = total_gradient_b / float(len(data)) return average_gradient_m, average_gradient_b

#梯度下降第二部 迭代 #不停迭代 向下逼近最优解

    def train(self, data):

#迭代次数为循环次数

for i in range(self.num_iteration):
	    #传入计算的average_gradient m和b 
	    #average gradient m和b也随着每一次迭代发生着变化,因为predict_y发生变化
            gradient_m, gradient_b = self.compute_gradient(data) 
            self.m -= gradient_m * self.learning_rate
            self.b -= gradient_b * self.learning_rate

#根据m和b计算预测y值

def predict(self, x): return self.m * x +self.b

#计算MSE,MSE是均方误差,代表拟合程度,MSE越小,则拟合程度越好
#MSE是y-(mx + b)^2的集合

    def computeMSE(self, data):

#总的误差设为0

total_error = 0

#对data里的每一个数据进行遍历

for i in range(len(data)):

#把x和y提取出来

x, y = data[i]

#计算预测后的y值,当没有训练时,y就是原本的x

predict_y = self.predict(x)

#计算单个y和x对的方差

error = (y - predict_y) **2

#进行累加

total_error += error

#计算平均方差 MSE

average_error = total_error / float(len(data)) return average_error def run(): data = np.genfromtxt('data.csv', delimiter = ',')

#超参数,迭代次数,学习参数。还有斜率截距的初始值在这里定义。 #define Hyper Parameter

num_iteration = 1000 learning_rate = 0.0002 initial_m = 0 initial_b = 0

#传参

model = LinearRegressor(num_iteration, learning_rate, initial_m, initial_b)

#训练之前的MSE计算

print("before train:{0}" + format(model.computeMSE(data)))

#进行训练

model.train(data)

#训练之后的MSE计算

print("after train:{1}" + format(model.computeMSE(data)))

#训练之后的m和b

print(model.m) print(model.b) run()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值