我有一些英特尔处理器的数据,我在不同类型的图形中提供这些数据。
我还想做一个回归,显示一个指数函数,我可以在我的数据中有最大年份后“预测”晶体管数量(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()
此代码显示:
我所尝试的是使用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没有足够的知识来执行此操作。
答案 0 :(得分:0)
一般情况下,您可以执行外推,但您应该对结果保持警惕。我不会盲目相信他们。例如,如果你有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()