在 scikit learn 中训练具有不同特征维度的逻辑回归模型

Posted

技术标签:

【中文标题】在 scikit learn 中训练具有不同特征维度的逻辑回归模型【英文标题】:train logistic regression model with different feature dimension in scikit learn 【发布时间】:2016-12-31 02:17:43 【问题描述】:

在 Windows 上使用 Python 2.7。想要使用特征 T1T2 拟合逻辑回归模型来解决分类问题,目标是 T3

我显示了T1T2 的值以及我的代码。问题是,既然T1 的维度是 5,T2 的维度是 1,我们应该如何对它们进行预处理,以便 scikit-learn 逻辑回归训练正确地利用它们?

顺便说一句,我的意思是对于训练样本 1,它的特征 T1[ 0 -1 -2 -3],而 T2 的特征是 [0],对于训练样本 2,它的特征 T1 是 [ 1 0 -1 -2] 和特征T2[1],...

import numpy as np
from sklearn import linear_model, datasets

arc = lambda r,c: r-c
T1 = np.array([[arc(r,c) for c in xrange(4)] for r in xrange(5)])
print T1
print type(T1)
T2 = np.array([[arc(r,c) for c in xrange(1)] for r in xrange(5)])
print T2
print type(T2)
T3 = np.array([0,0,1,1,1])

logreg = linear_model.LogisticRegression(C=1e5)

# we create an instance of Neighbours Classifier and fit the data.
# using T1 and T2 as features, and T3 as target
logreg.fit(T1+T2, T3)

T1,

[[ 0 -1 -2 -3]
 [ 1  0 -1 -2]
 [ 2  1  0 -1]
 [ 3  2  1  0]
 [ 4  3  2  1]]

T2,

[[0]
 [1]
 [2]
 [3]
 [4]]

【问题讨论】:

【参考方案1】:

它需要使用 numpy.concatenate 连接特征数据矩阵。

import numpy as np
from sklearn import linear_model, datasets

arc = lambda r,c: r-c
T1 = np.array([[arc(r,c) for c in xrange(4)] for r in xrange(5)])
T2 = np.array([[arc(r,c) for c in xrange(1)] for r in xrange(5)])
T3 = np.array([0,0,1,1,1])

X = np.concatenate((T1,T2), axis=1)
Y = T3
logreg = linear_model.LogisticRegression(C=1e5)

# we create an instance of Neighbours Classifier and fit the data.
# using T1 and T2 as features, and T3 as target
logreg.fit(X, Y)

X_test = np.array([[1, 0, -1, -1, 1],
                   [0, 1, 2, 3, 4,]])

print logreg.predict(X_test)

【讨论】:

谢谢大元,投票。 concatenate之后,逻辑回归会不会认为每个训练样本有6个特征? 顺便说一句,X_test 的目的是什么? @LinMa 是的,你是对的。连接后,您有 6 个特征(前五个特征来自 T1,最后一个来自 T2)。 X_test 由我自己附加只是为了测试:) 感谢 Daewon,想知道将它们分开是否有任何好处(但不同维度,一个特征是 4 维向量,另一个是标量),并且仍然利用逻辑回归做培训? @LinMa 不知道维护分离特征的好处,因为没有给出这个分析的意图。无论如何,您应该合并功能以使用 sklearn 的LogisticRegression。但是,您仍然在不同的变量中分别维护您的功能(您只是暂时合并它们以进行分析)。

以上是关于在 scikit learn 中训练具有不同特征维度的逻辑回归模型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 scikit-learn 组合具有不同维度输出的特征

不同特征的不同内核 - scikit-learn SVM

如何在 scikit-learn 中提取 MultinomialNB Pipeline 训练模型中的单词特征?

具有不同行数的 Scikit Learn 特征联合

scikit-learn:如果经过一次热编码后它的特征少于训练/测试集,如何预测新数据

scikit learn 的训练测试拆分导致训练数据中只有一个唯一值的特征