将列表重新整形为(-1,1)并将float返回为数据类型

时间:2017-02-20 22:57:40

标签: numpy machine-learning scikit-learn

我正在尝试构建Logistic回归模型,data.Exam1是第一列

    reg = linear_model.LogisticRegression()
    X = list(data.Exam1.values.reshape(-1,1)).........(1)

我已执行此操作

type(X[0]) returns numpy.ndarray

reg.fit接受包含列表中所有浮动项的参数,所以我这样做是因为此例外ValueError: Unknown label type: 'continuous'

newX = []
for item in X:
    type(float(item))
    newX.append(float(item))

所以我试图做的时候

reg.fit(newX,newY,A)

它抛出了我的异常

Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.

我已经在(1)中做了,当我再次尝试重塑它再次返回ndarray时,我怎样才能重新整形并将项目转换为浮动同时? Image

1 个答案:

答案 0 :(得分:1)

从聊天中调整我们的解决方案

您正在尝试了解入学(类型:bool)作为考试成绩的函数(考试1:浮动,考试2:浮动)。您的问题的关键是sklearn.linear_model.LogisticRegression需要两个输入:

  • X:训练数据的矢量/矩阵,其形状(观察数量,预测变量数量)类型为float
  • Y:分类结果的向量(在本例中为二进制),其形状(观察数,1)的类型为bool或int

他们称你正在尝试将Exam2(float)作为Exam1(float)的函数。这是根本问题。更复杂的问题是你将重新塑造的numpy数组重新编排为列表的方式。假设datapandas.DataFrame,您需要以下内容:

X = np.vstack((data.Exam1, data.Exam2)).T 
print X.shape # should be (100, 2) 
reg.fit(X, data.Admitted)

此处,data.Exam1data.Exam2都是长度为100的向量。使用np.vstack将它们组合成形状(2,100),因此我们采用转置以便我们拥有它沿着第一维度(100,2)进行适当的观察。在data.Exam1.values期间,pd.Seriesnp.array重播为np.vstack时,无需重新制作列表,甚至无需重复data.Admitted。同样地,reg.fit(形状(100,))与console.log很好地匹配。