Pandas 让scikit学会与熊猫合作

Pandas 让scikit学会与熊猫合作,pandas,scikit-learn,Pandas,Scikit Learn,刚开始在ML学习,需要一些帮助,让他们学会与熊猫一起工作 我正在读这篇文章,决定用我拥有的一个数据帧来尝试一下。下面是我所做的,以及由此产生的错误。我对这一切都很陌生,所以如果我忽略了一些愚蠢的事情,请原谅,但我认为最好在这里提问,而不是在没有真正理解它的情况下尝试破解来找到答案 谢谢大家 In [518]: cols = ['A','B','C','D','E','F','G','H','I','J','K'] In [519]: x = df['Miss'].values In [52

刚开始在ML学习,需要一些帮助,让他们学会与熊猫一起工作

我正在读这篇文章,决定用我拥有的一个数据帧来尝试一下。下面是我所做的,以及由此产生的错误。我对这一切都很陌生,所以如果我忽略了一些愚蠢的事情,请原谅,但我认为最好在这里提问,而不是在没有真正理解它的情况下尝试破解来找到答案

谢谢大家

In [518]: cols = ['A','B','C','D','E','F','G','H','I','J','K']

In [519]: x = df['Miss'].values

In [520]: y = df[list(cols)].values

In [532]: y.shape
Out[532]: (11345, 11)

In [533]: x.shape
Out[533]: (11345,)

clf = Pipeline([
  ('feature_selection', LinearSVC(penalty="l1", dual=False)),
  ('classification', RandomForestClassifier())])

In [536]: clf.fit(x,y)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/cschwalbach/as_research_repo/logs/<ipython-input-536-5c1831092d7a> in <module>()
----> 1 clf.fit(x,y)

/usr/lib64/python2.7/site-packages/sklearn/pipeline.pyc in fit(self, X, y, **fit_params)
    124         data, then fit the transformed data using the final estimator.
    125         """
--> 126         Xt, fit_params = self._pre_transform(X, y, **fit_params)
    127         self.steps[-1][-1].fit(Xt, y, **fit_params)
    128         return self

/usr/lib64/python2.7/site-packages/sklearn/pipeline.pyc in _pre_transform(self, X, y, **fit_params)
    114         for name, transform in self.steps[:-1]:
    115             if hasattr(transform, "fit_transform"):
--> 116                 Xt = transform.fit_transform(Xt, y, **fit_params_steps[name])
    117             else:
    118                 Xt = transform.fit(Xt, y, **fit_params_steps[name]) \

/usr/lib64/python2.7/site-packages/sklearn/base.pyc in fit_transform(self, X, y, **fit_params)
    362         else:
    363             # fit method of arity 2 (supervised transformation)

--> 364             return self.fit(X, y, **fit_params).transform(X)
    365
    366

/usr/lib64/python2.7/site-packages/sklearn/svm/base.pyc in fit(self, X, y)
    684             raise ValueError("X and y have incompatible shapes.\n"
    685                              "X has %s samples, but y has %s." %
--> 686                              (X.shape[0], y.shape[0]))
    687
    688         liblinear.set_verbosity_wrap(self.verbose)

ValueError: X and y have incompatible shapes.
X has 1 samples, but y has 124795.
In[518]:cols=['A','B','C','D','E','F','G','H','I','J','K']
在[519]中:x=df['Miss'].值
在[520]中:y=df[list(cols)]。值
In[532]:y形
Out[532]:(11345,11)
In[533]:x.shape
Out[533]:(11345,)
clf=管道([
('feature_selection',LinearSVC(惩罚=“l1”,双=假)),
('classification',RandomForestClassifier())])
In[536]:clf.fit(x,y)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
/主页/cschwalbach/as\u研究报告/repo/logs/in()
---->1级配合(x,y)
/usr/lib64/python2.7/site-packages/sklearn/pipeline.pyc-in-fit(self,X,y,**fit_参数)
124个数据,然后使用最终估计器拟合转换后的数据。
125         """
-->126 Xt,拟合参数=self._pre_变换(X,y,**拟合参数)
127 self.steps[-1][-1].fit(Xt,y,**fit_参数)
128返回自我
/usr/lib64/python2.7/site-packages/sklearn/pipeline.pyc in_pre_transform(self,X,y,**fit_参数)
114表示名称,在self中转换。步骤[:-1]:
115如果hasattr(变换,“拟合变换”):
-->116 Xt=transform.fit_transform(Xt,y,**fit_参数_步骤[名称])
117其他:
118 Xt=transform.fit(Xt,y,**fit_params_步骤[名称])\
/fit_转换中的usr/lib64/python2.7/site-packages/sklearn/base.pyc(self、X、y、**fit_参数)
362其他:
363算术2的拟合方法(监督变换)
-->364返回自拟合(X,y,**拟合参数).transform(X)
365
366
/usr/lib64/python2.7/site-packages/sklearn/svm/base.pyc-in-fit(self,X,y)
684 raise VALUE ERROR(“X和y具有不兼容的形状。\n”
685“X有%s个样本,但y有%s个样本”
-->686(X形[0],y形[0]))
687
688 liblinear.set\u verbosity\u wrap(self.verbose)
ValueError:X和y具有不兼容的形状。
X有1个样本,但y有124795个。

大多数人使用X作为功能,使用y作为标签。不幸的是,您的方式正好相反。因此,您可能会在文档中感到困惑

使用以下内容代替

In [519]: y = df['Miss'].values

In [520]: X = df[list(cols)].values

然后您可以通过
clf.fit(X,y)

来拟合模型。我相信scikit学习api通常是
*.fit(X,y)
其中
X
是具有
N
观测值和
d
功能的
nxd
数组。因此,您希望交换
X
y
。您应该重新定义它们,使其与其他人一致,而不是
clf.fit(y,X)
。是的,这似乎就是问题所在。让我们知道这是否解决了问题。太蠢了!感谢这么多人!我很高兴这很容易,而不是更难。@larsmans,我不需要转换任何东西