Pandas 如何让scikit学会寻找简单的非线性关系

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

我在熊猫数据框中有一些数据(尽管熊猫不是这个问题的重点)。作为一个实验,我将列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'] = 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
  • 预处理似乎是错误的,因为它破坏了Z/R关系。在这种情况下,正确的预处理方法是什么
  • 有什么方法可以接近100%的准确度吗?线性回归是错误的工具,因为关系不是线性的
  • 这五个特征在我的数据中高度相关。scikit学习中是否实现了非负最小二乘法?(我可以在邮件列表中看到它,但文档中没有提到。)我的目标是将尽可能多的系数设置为零

  • 解决方案并不是那么简单,而且可能会受到您的数据的很大影响


    如果变量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)。