当.dropna()为它们留下不同的大小时,处理两个数据集的正确方法是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当.dropna()为它们留下不同的大小时,处理两个数据集的正确方法是什么?相关的知识,希望对你有一定的参考价值。
我正在测试机器学习技术,首先使用模型数据集,然后使用测试数据集(csv文件)。但是,使用df.dropna(inplace = True)会使它们的大小不同(模型为48470,测试为48571)。这会在我的代码中导致多个问题。
例如,虽然这有效:
linear = linear_model.LinearRegression()
#Model fit to data
linear.fit(xmodel,ymodel.values.ravel())
#Prediction made by model
pred_linear = linear.predict(xtest)
## Compute RMSE
linear_rmse = mean_squared_error(ytest,pred_logit)
print("Linear regression RMSE is ",linear_rmse)
#Linear regression RMSE is 0.07557238168273192
另一方面,我无法绘制所有结果:
x1=np.linspace(0,1,48571)
fig, ax = plt.subplots()
ax.plot(x1, yt, 'o', label="Data")
#ax.plot(x1, y_true, 'b-', label="True")
ax.plot(np.hstack((x1, xmodel)), np.hstack((ym, yt)), 'r', label="OLS prediction")
ax.legend(loc="best");
回报
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-124-29b0a94ea028> in <module>
24 ax.plot(x1, yt, 'o', label="Data")
25 #ax.plot(x1, y_true, 'b-', label="True")
---> 26 ax.plot(np.hstack((x1, xmodel)), np.hstack((ym, yt)), 'r', label="OLS prediction")
27 ax.legend(loc="best");
C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\shape_base.py in hstack(tup)
284 # As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
285 if arrs and arrs[0].ndim == 1:
--> 286 return _nx.concatenate(arrs, 0)
287 else:
288 return _nx.concatenate(arrs, 1)
ValueError: all the input arrays must have same number of dimensions
同样(我相信这是一个相关的问题,尽管如果不是我的道歉)
reg_model = sm.OLS(endog=ymodel, exog=xmodel)
reg_test = sm.OLS(endog=ytest, exog=xtest)
reg_model.fit()
reg_test.fit()
pred_regmodel=reg_model.predict(xtest)
pred_regtest=reg_test.predict(xtest) #Transpose sorta solved this, but takes forever #xtest.iloc[9,:].values) technically solved shape problem, but gave false answer
regmodel_rmse = mean_squared_error(ytest,pred_regmodel)
print("OLS RMSE is ",regmodel_rmse)
返回类似的不匹配的dim错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-135-3ab9b9511c74> in <module>
3 reg_model.fit()
4 reg_test.fit()
----> 5 pred_regmodel=reg_model.predict(xtest)
6 pred_regtest=reg_test.predict(xtest) #Transpose sorta solved this, but takes forever #xtest.iloc[9,:].values) technically solved shape problem, but gave false answer
7 regmodel_rmse = mean_squared_error(ytest,pred_regmodel)
C:\ProgramData\Anaconda3\lib\site-packages\statsmodels\regression\linear_model.py in predict(self, params, exog)
343 exog = self.exog
344
--> 345 return np.dot(exog, params)
346
347 def get_distribution(self, params, scale, exog=None, dist_class=None):
ValueError: shapes (48470,9) and (48571,9) not aligned: 9 (dim 1) != 48571 (dim 0)
我想把我的图形看起来像this statsmodels example的In [7]。至于第二个例子,我的目标是将我的sm.OLS方法训练用模型数据或测试数据,与ytest df进行比较,这样我就可以找到MSRE范围来与logit / lasso / SVC / etc方法进行比较我已经习惯了。
答案
列车和测试数据集没有平衡性。您只需要输入相同数量的功能/列。你的第一个错误是因为x1
和x_model
是不同的大小,而np.hstack
不能堆叠不同的大小
第二个错误,我觉得x_test已经转换。试试x_test.T()
?
以上是关于当.dropna()为它们留下不同的大小时,处理两个数据集的正确方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章