Python数据预测

时间:2016-11-11 04:27:44

标签: python scikit-learn regression

我有一些英特尔处理器的数据,我在不同类型的图形中提供这些数据。

我还想做一个回归,显示一个指数函数,我可以在我的数据中有最大年份后“预测”晶体管数量(Max: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)

我不确定是否有一些设置可以添加到分类器中,或者如果我对ML没有足够的知识来执行此操作。

1 个答案:

答案 0 :(得分:0)

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

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

enter image description here

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()