如何使用带有 doc2vec 输入的 Sklearn 线性回归

How to use Sklearn linear regression with doc2vec input

我有 250k 文本文档(推文和报纸文章)表示为使用 doc2vec 模型获得的向量。现在,我想使用回归量(多元线性回归)来预测连续值输出——在我的例子中是英国消费者信心指数。 我的代码永远运行。我做错了什么?

我从 Excel 导入了我的数据并将其拆分为 x_train 和 x_dev。数据由预处理文本和 CCI 连续值组成。

# Import doc2vec model
dbow = Doc2Vec.load('dbow_extended.d2v')
dmm = Doc2Vec.load('dmm_extended.d2v')
concat = ConcatenatedDoc2Vec([dbow, dmm]) # model uses vector_size 400

def get_vectors(model, input_docs):
    vectors = [model.infer_vector(doc.words) for doc in input_docs]
    return vectors

# Prepare X_train and y_train
train_text = x_train["preprocessed_text"].tolist()
train_tagged = [TaggedDocument(words=str(_d).split(), tags=[str(i)]) for i, _d in list(enumerate(train_text))]
X_train = get_vectors(concat, train_tagged)
y_train=x_train['CCI_UK']

# Fit regressor 
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit(X_train, y_train)

# Predict and evaluate
prediction=reg.predict(X_dev)
print(classification_report(y_true=y_dev,y_pred=prediction),'\n')

由于拟合一直没有完成,我想知道我是否使用了错误的输入。但是,不会显示任何错误消息,代码会一直运行下去。我做错了什么?

非常感谢您的帮助!!

变量X_train是一个列表或列表的列表(因为函数get_vectors() return是一个列表)而sklearn的线性回归的输入应该是2 -D数组.

尝试使用以下方法将 X_train 转换为数组:

X_train = np.array(X_train)

这应该有所帮助!