当.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方法进行比较我已经习惯了。

答案

列车和测试数据集没有平衡性。您只需要输入相同数量的功能/列。你的第一个错误是因为x1x_model是不同的大小,而np.hstack不能堆叠不同的大小

第二个错误,我觉得x_test已经转换。试试x_test.T()

以上是关于当.dropna()为它们留下不同的大小时,处理两个数据集的正确方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Batch 处理记录,但不将它们插入数据库

当它们移动以填充其他淡出的 div 留下的空白空间时如何为 div 设置动画

当数据集的列具有不同的行数时合并它们

当数据库中的表已经存在时,留下不同的消息

当图像大小改变时相对于图像定位文本

如何处理不同的图像尺寸