python线性回归算法简介_Python实现最简单的线性回归算法

#coding:utf-8from math import sqrtimport matplotlib.pyplot as pltdataset = [[1.2,1.1],[2.4,3.5],[4.1,3.2],[3.4,2.8],[5,5.4]]x = [row[0] for row in dataset]y = [row[1] for row in dataset]pre_y = list()...
摘要由CSDN通过智能技术生成

#coding:utf-8

from math import sqrt

import matplotlib.pyplot as plt

dataset = [[1.2,1.1],[2.4,3.5],[4.1,3.2],[3.4,2.8],[5,5.4]]

x = [row[0] for row in dataset]

y = [row[1] for row in dataset]

pre_y = list()#画图用

#计算均值

def mean(values):

return sum(values)/float(len(values))

#计算x和y的协方差函数

def covariance(x,mean_x,y,mean_y):

cover = 0

for i in range(len(x)):

cover += (x[i] - mean_x)*(y[i] - mean_y)

return cover

#计算方差

def variance(values,mean):

return sum([(x-mean)**2 for x in values])

#计算回归系数

def coefficients(dataset):

x_mean,y_mean = mean(x),mean(y)

w1 = covariance(x,x_mean,y,y_mean) / variance(x,x_mean) #公式推导出来的

w0 = y_mean - w1 * x_mean #公式推导出来的

return (w0,w1)

#利用“均方差误差公式RMSE”求误差

def rmse_metric(actual,predicted):

sum_error = 0.0

for i in range(len(actual)):

predicted_error = predicted[i] - actual[i]

sum_error += (predicted_error**2)

mean_error = sum_error / float(len(actual))

return sqrt(mean_error)

#构建简单的线性回归

def simple_linear_regression(train,test):

predictions = list()

w0,w1 = coefficients(train)

for row in test:

y_model = w1 *row[0] + w0

predictions.append(y_model)

return predictions

#评估算法数据准备以及协调

def evaluate_algorithm(dataset, alogrithm):

test_set = list()

for row in dataset:

row_copy = list(row)

row_copy[-1] = None

test_set.append(row_copy)

predicted = alogrithm(dataset,test_set)

for val in predicted:

pre_y.append(val)

print('%.3f\t'%(val))

actual = [row[-1] for row in dataset]

rmse = rmse_metric(actual,predicted)

return rmse

#返回RMSE

rmse = evaluate_algorithm(dataset,simple_linear_regression)

print('RMSE:%.3f'%(rmse))

#画出散点图

x = [row[0] for row in dataset]

y = [row[1] for row in dataset]

print(len(pre_y))

plt.axis([0,6,0,6])

plt.plot(x,y,'bs')

plt.plot(x,pre_y,'ro')

plt.plot(x,pre_y,'r-')

plt.grid()

plt.show()

【结果】

7f816f4144422ef0c2436f7d5ab6c994.png

29783aaa55852683118418c49c5e40aa.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值