python预测算法_使用Python理解和实践机器学习一元线性回归算法

import numpy as np

import matplotlib.pyplot as plt

from sklearn.linear_model import LinearRegression

#自定义字体,解决中文显示问题

plt.rcParams['font.family'] = ['Microsoft YaHei']

plt.rcParams['axes.unicode_minus'] = False

#重量 训练集,拟合时一维数组需要使用[]

X = [[0.5],[1.1],[1.5],[2.2],[3.0],[3.2],[3.4]]

#出售价格

y = [[7.00],[14.10],[19.00],[22.00],[35.00],[40.00],[42.00]]

plt.figure()

plt.title("土ji价格与重量的数据")

plt.xlabel("重量(斤)")

plt.axis(([0,8,0,60]))

plt.grid(True)

#画点

plt.plot(X,y,'r.')

#一元线性回归模型 y = a +bX

model = LinearRegression()

model.fit(X,y)

newX = 2.3

newY = model.predict(newX)

print(newY)

print("预测一只 %.1f 斤的土ji价格:%.2f 元" %(newX,newY[0]))

#预测多个值, 绘制不同的模型直线

X2 = [[0.5],[2.3],[4.2],[6.6]]

y2 = model.predict(X2)

plt.plot(X2,y2,'y-.')

plt.figure()

y3 = [30,30,30,30]

y4 = y2 * 0.4 +4

plt.plot(X2,y3,'r-.')

plt.plot(X2,y4,'b-.')

model.fit(X[1:-1],y[1:-1])

y5 = model.predict(X2)

plt.plot(X2,y5,'g-.')

#cost function

plt.figure()

plt.title("土ji价格与重量的数据2")

plt.xlabel("重量(斤)")

plt.axis(([0,8,0,60]))

plt.grid(True)

plt.plot(X,y,'k.')

model2 =LinearRegression()

model2.fit(X,y)

#根据默认拟合的模型进行X2的预测

X2 = [[0.3],[1.2],[2.7],[3.9]]

y2 = model2.predict(X2)

plt.plot(X2,y2,'g-.')

#使用模型预测已有X的预测值

y0 = model2.predict(X)

print(enumerate(X))

#绘制预测值与真实值的差值

for idx,x in enumerate(X):

print("idx= %s" %idx)

plt.plot([x,x],[y[idx],y0[idx]],'r-')

#计算差值平方和,实现模型最佳拟合:有公式

fangchapingfang = np.mean((model2.predict(X)- y)**2)

print("模型的残差值平方和:%.2f " %fangchapingfang)

################# 根据训练数据求解y=a+b*x模型的参数a和b 效果和直接使用sklearn.linear_model一致##########################

#计算方差:有公式, ddof贝塞尔校正系数

#方差是用来衡量样本分散程度的

var_X = np.var(X,ddof=1)

print("方差 %f" %var_X)

#计算协方差

#将X,y组合成一个矩阵

X = [0.5,1.1,1.5,2.2,3.0,3.2,3.4]

var_X = np.var(X,ddof=1)

#出售价格

y = [7.00,14.1,19.00,22.00,35.00,40.00,42.00]

X_new = np.stack((X,y),axis=0)

print(X_new)

#计算协方差矩阵 [cov(x,x) cov(x,y) cov(y,x) cov(y,y]

cov=np.cov(X_new)

print("协方差矩阵 cov=",cov)

#取协方差xy对角线上的元素

cov_xy=cov[0,1]

print("xy协方差值:" ,cov_xy)

#计算贝塔

beta = cov_xy/var_X

print("贝塔 ",beta)

#计算x,y的均值

print("X_mean=",np.mean(X))

print("y_mean=",np.mean(y))

#计算alpha, y_mean = alpah + beta* x_mean

alpha = np.mean(y) -beta* np.mean(X)

print("Alpha = ",alpha)

print("最终模型:y = %.2f + %.2f * X" %(alpha,beta))

#使用模型预测新的X

y_20 = alpha + beta* 2.3

print("预测2.3斤土ji的价格: %.2f" %y_20)

plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值