【问题标题】:Python Data PredictionPython 数据预测
【发布时间】:2016-11-11 04:27:43
【问题描述】:

我有一些来自英特尔处理器的数据,我用不同类型的图形呈现这些数据。

而且我还想做一个回归,它显示一个指数函数,我可以在我的数据中的最大年份(最大值:2014)之后“预测”晶体管数量。例如:2019、2021、2030..

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.read_csv('data.csv', delimiter=',')

X = np.array(data['Year'], dtype=int)
y = np.array(data['Count'], dtype=int)

print(X)
print(y)

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

plt.xlabel('Year')
plt.ylabel('Transistor Count')

plt.yscale('log')

plt.grid(True)

plt.show()

这段代码显示:

Transistor count (Image)

我尝试使用 Scikit-Learning 创建回归,但我总是以错误的指数函数设置告终。而且我也尝试了一些在线回归工具,但它们并不那么准确。

我还查看了Sklearn Cheat Sheet 以找到要使用的正确分类器。但我对 Sklearn 还不是很熟悉。我自己尝试了 2 天,在 Google 和 StackOverflow 上进行了大量搜索,但没有发现任何适用于我的数据的内容。

[1971 1972 1974 1976 1978 1982 1985 1989 1993 1995 1997 1999 2000 2002 2006
 2008 2010 2011 2012 2013 2014 2014]
[      2300       3500       4400       6500      29000     134000
     275000    1180235    3100000    5500000    7500000    9500000
   42000000  220000000  291000000  731000000 1170000000 2270000000
 3100000000 1860000000 4310000000 5560000000]

这是两个数组里面的数据。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC

data = pd.read_csv('data.csv', delimiter=',')

X = np.array(data['Year'], dtype=int)
y = np.array(data['Count'], dtype=int)

X = np.reshape(X, (X.size, 1))

clf = SVC()

clf.fit(X, y)

for i in range(1971, 2030, 1):
    print(i,':', clf.predict([[i]]))

并且使用此代码,程序将预测 2014 年之后的数据与 2014 年的值相同。( (2015-2030).value === 2014.value )

我不确定是否可以向分类器添加一些设置,或者我只是没有足够的机器学习知识来执行此操作。

【问题讨论】:

标签: python scikit-learn regression


【解决方案1】:

一般情况下,您可以执行外推,但您应该警惕您的结果。我不会盲目相信他们。例如,如果你有 3 年的数据,你会相信 1000 年的推断吗?不过这当然是可能的。

但是,如果要执行回归,为什么要使用分类器呢?尝试使用线性回归,因为存在近似线性拟合。模型是 log(y) = a + bX。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression  # linear regression


X = np.array(data['Year'], dtype=int)
y = np.array(data['Count'], dtype=int)

X = np.reshape(X, (X.size, 1))

clf = LinearRegression(fit_intercept=False)

clf.fit(X, np.log(y))  # fit the log of y

pred= []
for i in range(1971, 2030, 1):
    pred.append(clf.predict([[i]]))

plt.plot(range(1971, 2030, 1), pred, 'bo')

plt.xlabel('Year')
plt.ylabel('Transistor Count')

plt.grid(True)

plt.show()

【讨论】:

    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2021-07-09
    • 2018-05-04
    • 2021-02-16
    相关资源
    最近更新 更多