【发布时间】:2018-12-09 18:13:58
【问题描述】:
我最近开始使用 python 进行机器学习。下面是我选择的一个数据集作为示例,以及我到目前为止所使用的代码。选择 [2000....2015] 作为测试数据和训练数据 [2016, 2017]。
Dataset
Years Values
0 2000 23.0
1 2001 27.5
2 2002 46.0
3 2003 56.0
4 2004 64.8
5 2005 71.2
6 2006 80.2
7 2007 98.0
8 2008 113.0
9 2009 155.8
10 2010 414.0
11 2011 2297.8
12 2012 3628.4
13 2013 16187.8
14 2014 25197.8
15 2015 42987.8
16 2016 77555.5
17 2017 130631.9
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
df = pd.DataFrame([[i for i in range(2000,2018)],
[23.0,27.5,46.0,56.0,64.8,71.2,80.2,98.0,113.0,155.8,414.0,2297.8,3628.4,16187.8,25197.8,42987.8,77555.5,130631.9]])
df = df.T
df.columns = ['Years', 'Values']
上面的代码创建了DataFrame。要记住的另一件重要事情是我的Years 列是一个时间序列,而不仅仅是一个连续值。我没有进行任何更改来适应这一点。
我想拟合可能有帮助的非线性模型,并像我为线性模型示例所做的那样打印绘图。这是我尝试使用线性模型的方法。此外,在我自己的示例中,我似乎没有考虑到我的 Years 列是时间序列而不是连续的这一事实。
一旦我们有了模型,就想用它来预测至少未来几年的值。
X = df.iloc[:, :-1].values
y = df.iloc[:, 1].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 0, shuffle = False)
lm = LinearRegression()
lm.fit(X_train, y_train)
y_pred = lm.predict(X_test)
plt.scatter(X_train, y_train, color = 'red')
plt.plot(X_train, lm.predict(X_train), color = 'blue')
plt.title('Years vs Values (training set)')
plt.xlabel('Years')
plt.ylabel('Values')
plt.show()
【问题讨论】:
-
不明白你想要什么!你想要非线性回归吗?或者您想知道如何将您的输出发送到
fit my output to the X_train and Y_train data,因为您似乎已经这样做了! -
嗨 Abhishek,我需要一个非线性回归。我已经尝试过
SVM(kernel = 'poly'),但没有奏效。你能帮忙吗? -
好的,你也可以
DataFramename.dtypes,告诉我你得到了什么? -
年份:int64,值:float64
-
好吧,想办法
标签: python scikit-learn statistics regression non-linear-regression