【问题标题】:Linear regression with Python使用 Python 进行线性回归
【发布时间】:2018-07-23 18:42:09
【问题描述】:

我正在学习“使用 Python 构建机器学习系统(第 2 次)”。 我在第一章的答案部分有一个愚蠢的怀疑。 根据这本书和我的观察,我总是将二阶多项式作为最佳拟合曲线。 每当我用训练数据集训练我的系统时,对于不同的多项式函数,我都会得到不同的测试错误。 因此我的方程参数也不同。 但令人惊讶的是,我每次在 9.19-9.99 范围内都会得到大致相同的答案。 我的最终假设函数每次都有不同的参数,但我得到的答案大致相同。 谁能告诉我背后的原因? [仅供参考:我正在寻找 y=100000 的答案] 我正在分享代码示例和每次迭代的输出。

以下是错误和相应的答案:

提前致谢!

def error(f, x, y):
    return sp.sum((f(x)-y)**2)
import scipy as sp
import matplotlib.pyplot as mp
data=sp.genfromtxt("web_traffic.tsv",delimiter="\t")
x=data[:,0]
y=data[:,1]
x=x[~sp.isnan(y)]
y=y[~sp.isnan(y)]
mp.scatter(x,y,s=10)
mp.title("web traffic over the month")
mp.xlabel("week")
mp.ylabel("hits/hour")
mp.xticks([w*24*7 for w in range(10)],["week %i"%i for i in range(10)])
mp.autoscale(enable=True,tight=True)
mp.grid(color='b',linestyle='-',linewidth=1)
mp.show()
infletion=int(3.5*7*24)
xa=x[infletion:]
ya=y[infletion:]
f1=sp.poly1d(sp.polyfit(xa,ya,1))
f2=sp.poly1d(sp.polyfit(xa,ya,2))
f3=sp.poly1d(sp.polyfit(xa,ya,3))
print(error(f1,xa,ya))
print(error(f2,xa,ya))
print(error(f3,xa,ya))
fx=sp.linspace(0,xa[-1],1000)
mp.plot(fx,f1(fx),linewidth=1)
mp.plot(fx,f2(fx),linewidth=2)
mp.plot(fx,f3(fx),linewidth=3)
frac=0.3
partition=int(frac*len(xa))
shuffled=sp.random.permutation(list(range(len(xa))))
test=sorted(shuffled[:partition])
train=sorted(shuffled[partition:])
fbt1=sp.poly1d(sp.polyfit(xa[train],ya[train],1))
fbt2=sp.poly1d(sp.polyfit(xa[train],ya[train],2))
fbt3=sp.poly1d(sp.polyfit(xa[train],ya[train],3))
fbt4=sp.poly1d(sp.polyfit(xa[train],ya[train],4))
print ("error in fbt1:%f"%error(fbt1,xa[test],ya[test]))
print ("error in fbt2:%f"%error(fbt2,xa[test],ya[test]))
print ("error in fbt3:%f"%error(fbt3,xa[test],ya[test]))
from scipy.optimize import fsolve
print (fbt2)
print (fbt2-100000)
maxreach=fsolve(fbt2-100000,x0=800)/(7*24)
print ("ans:%f"%maxreach)

【问题讨论】:

    标签: python python-3.x machine-learning linear-regression web-traffic


    【解决方案1】:

    不要那样做。 线性回归比您想象的更“取决于您”。

    首先获取直线的斜率,(#1) average((f(x2)-f(x))/(x2-x))

    然后将该答案用作 M to (#2) average(f(x)-M*x)。

    现在你有 (#1) 和 (#2) 作为你的回归。

    对于与此类似的任何类型的回归,多项式,

    您需要通过使用 f(x) 的 n 个超增量与每个相对于 delta(x) 的值来减去 A 因子(第一个因子)。前任。 delta(ax^2+bx+c)/delta(x) 给你一个带有 a 和 b 的方程,然后它就可以工作了。这样做时,如果有更多条目,则每次取平均值。做它就像一张纸上的窗口向下滑动。前任。您选择条目 1-10,然后选择 2-11,3-12 等进行一些疯狂的回归。您可能想要创建一个矩阵 API。处理它的最佳方法是首先创建一个 API,它首先取出一行和一列。然后你就用它来自动化它。仅在 2 列中留下的输入输出条目的比率被平均,并且是系数的解决方案。然后制作一个程序来取出行,但例如留下第 1 行和第 5 行(输出),然后是第 2 行、第 5 行......第 4 行和第 5 行。我不推荐使用 python 来编码。我推荐 C 编程,因为它可以防止你制作你不记得的脏数组。您需要了解的系统理论。您必须逐个系统地创建。如果不构建经过仔细测试的自动化子系统就编写矩阵代码是很疯狂的。直到我在 C 中工作之前我都失败了,所以我已经做了一个经过仔细测试的 1 倍收缩函数,然后构建系统来自动获取 1 个系数,测试它,然后自动重复该程序来解决它。通过使用 python 或类似的快捷方式,您将无法理解其中的任何内容。在您意识到它们的真正含义后使用它们。我就是这样学习的。我仍然喜欢我是如何编码的?我还是很惊讶。但问题是,它在 4x4(实际上是 4x5)矩阵之上是不稳定的。

    祝你好运, 米莎·泰勒

    【讨论】:

    • 我可以交替使用行和列,这取决于你的安排。
    猜你喜欢
    • 1970-01-01
    • 2018-07-31
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2019-01-06
    • 2018-02-03
    相关资源
    最近更新 更多