整理篇-回归

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/7/30 10:46
# @Author  : lH.wu  
# linear regression 线性回归测试

import matplotlib.pyplot as plt
from scipy import stats

# 横坐标值和纵坐标值
xl = [5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6]
yl = [99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86]

# 单独绘制散点图
# plt.scatter(xl, yl)
# plt.show()

# m 的值就是斜率(slope),b的值就是截距(intercept) 计算关系 y=mx+b

# R-Squared
# 重要的是要知道 x 轴的值和 y 轴的值之间的关系有多好,如果没有关系,则线性回归不能用于预测任何东西。
# 该关系用一个称为 r 平方(r-squared)的值来度量。
# r 平方值的范围是 0 到 1,其中 0 表示不相关,而 1 表示 100% 相关。
# Python 和 scipy 模块将为您计算该值,您所要做的就是将 x 和 y 值提供给它:
slope, intercept, r, p, std_err = stats.linregress(xl, yl)

print(r)  # -0.758591524376155 说明有7成关系,关系还是很强的,非强关系的时候就要使用多项式回归


# 此时斜率本身可以看作
# 定义这个线性关系
def my_fun(x):
    return slope * x + intercept


# 通过函数计算y列表值函数
my_model = list(map(my_fun, xl))

# 散点图
plt.scatter(xl, yl)
# 回归线图
plt.plot(xl, my_model)
# 绘制
plt.show()

# 此时可以通过函数my_fun预测用x值预测y值
print(my_fun(10))  # 85.59308314937454
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/7/30 11:45
# @Author  : lH.wu
# Polynomial Regression多项式回归

import matplotlib.pyplot as plt
import numpy
from sklearn.metrics import r2_score

x = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22]
y = [100, 90, 80, 60, 60, 55, 60, 65, 70, 70, 75, 76, 78, 79, 90, 99, 99, 100]

# polyfit的第三个参数时阶数,一般来说,理论上是越大越精确,高阶包括了低阶 但是当你取的很大时 高阶的系数基本无限接近于0 就没有这个必要了
# 所以,一般自己多测几次,选最合适的[一阶就是一条单项回归线,二阶抛物线,。。。]
# polyfit获取每一阶的参数,poly1d把参数组成多项式方程
model = numpy.poly1d(numpy.polyfit(x, y, 3))

# 继续使用 r-squared来度量x和y关系,同时测试设置的阶数合不合理
# 4阶 :0.9542030834699506
# 3阶 :0.9432150416451025
# 2阶 :0.7597771601895889
# 1阶 :0.18231625879420676
print(r2_score(y, model(x)))

# 在1-22范围内均匀的生成100个数
line = numpy.linspace(1, 22, 100)

plt.scatter(x, y)
plt.plot(line, model(line))
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值