Pandas 如何让scikit学会寻找简单的非线性关系
我在熊猫数据框中有一些数据(尽管熊猫不是这个问题的重点)。作为一个实验,我将列ZR作为列Z除以列R。作为使用scikit learn的第一步,我想看看我是否可以从其他列预测ZR(这应该是可能的,因为我只是从R和Z进行了预测)。我的步子一直在走Pandas 如何让scikit学会寻找简单的非线性关系,pandas,machine-learning,scikit-learn,Pandas,Machine Learning,Scikit Learn,我在熊猫数据框中有一些数据(尽管熊猫不是这个问题的重点)。作为一个实验,我将列ZR作为列Z除以列R。作为使用scikit learn的第一步,我想看看我是否可以从其他列预测ZR(这应该是可能的,因为我只是从R和Z进行了预测)。我的步子一直在走 columns=['R','T', 'V', 'X', 'Z'] for c in columns: results[c] = preprocessing.scale(results[c]) results['ZR'] = preprocessi
columns=['R','T', 'V', 'X', 'Z']
for c in columns:
results[c] = preprocessing.scale(results[c])
results['ZR'] = preprocessing.scale(results['ZR'])
labels = results["ZR"].values
features = results[columns].values
#print labels
#print features
regr = linear_model.LinearRegression()
regr.fit(features, labels)
print(regr.coef_)
print np.mean((regr.predict(features)-labels)**2)
这给
[ 0.36472515 -0.79579885 -0.16316067 0.67995378 0.59256197]
0.458552051342
解决方案并不是那么简单,而且可能会受到您的数据的很大影响
如果变量R和Z是有界的
(对于ex 0,您应该能够轻松地使用,而无需任何预处理,因为这是一种非线性方法:
model = RandomForestRegressor(n_estimators=10, max_features=2)
model.fit(features, labels)
你可以使用参数来获得更好的性能。变量是有界的,非负的。它们的范围可达几百个。数据是真实的,但我的问题是很清楚的,对于这个特定的问题,我可以使用Z/R作为特征。我最关心的是如何在数据中找到其他简单的乘法关系。我支持如果你定义新变量为log(Z),log(R),输出为log(Z/R)在新变量中,你有一个简单的线性问题。你现在可以这样做,因为你知道真实的关系。在真实的问题中,这会困难得多。我建议你从乘法关系开始。将输出定义为Z*R,然后转移到神经网络。你可能可以用ng径向基函数。它们是一个“更高级”的神经网络。无论如何,我认为你应该从更简单的东西开始。例如,你可以尝试只用一个变量来估计函数t*sin(t)。