拟合逻辑回归时使用ravel()处理目标变量遇DataFrame无该属性错误求助
解决DataFrame无法使用ravel()的问题
嘿,这个问题我之前调模型时也碰到过,其实根源很清楚——你手里的target_newrdn是Pandas DataFrame对象,而ravel()是NumPy数组专属的方法,DataFrame自然没有这个属性。给你几个简单有效的解决思路:
方法1:用.values先转成NumPy数组再ravel
直接通过.values把DataFrame转换成NumPy数组,之后就能调用ravel()把它压成一维数组,完美匹配sklearn的要求:
target_newrdn = target_newrdn.values.ravel()
方法2:提取为Series再处理
如果你的目标变量只有一列,直接用iloc提取出这一列的Series,Series本身可以直接用.ravel()或者.values得到一维数组:
# 提取第一列转成Series后ravel target_newrdn = target_newrdn.iloc[:, 0].ravel() # 或者更直接,Series的.values本身就是一维的 target_newrdn = target_newrdn.iloc[:, 0].values
方法3:用squeeze()压缩维度
Pandas的squeeze()方法可以自动把单维度的DataFrame压缩成一维数组,一步到位:
target_newrdn = target_newrdn.squeeze()
补充说明
为什么会触发那个警告?因为sklearn的逻辑回归模型要求目标变量y是一维数组(形状为(n_samples,)),而你最初传入的是列向量形式的DataFrame(形状为(n_samples,1)),所以才会提示你调整形状。上面的方法都能帮你把目标变量转换成符合要求的格式,之后再拟合模型就不会有警告啦。
内容的提问来源于stack exchange,提问作者Edward Lin
相关产品推荐
相关产品推荐

