求解Sklearn LogisticRegression双向量特征输入的正确语法
解决Sklearn LogisticRegression同时输入查询与文档向量的问题
要同时将query vector和doc vector作为模型输入,核心是把两个向量拼接成单个一维特征向量,让输入特征矩阵符合(样本数, 总特征数)的格式,以下是两种可行的实现方式:
方法1:用Pandas Apply拼接向量
利用apply逐行拼接两个向量,再转换为模型可接受的格式:
import pandas as pd from sklearn.linear_model import LogisticRegression y = training_data["relevant"] # 逐行拼接query和doc向量,生成新的特征列表 X = training_data.apply(lambda row: row["query vector"] + row["doc vector"], axis=1).tolist() clf = LogisticRegression() clf.fit(X, y)
方法2:用Numpy水平拼接数组
先将向量列转换为二维数组,再通过hstack合并:
import numpy as np from sklearn.linear_model import LogisticRegression y = training_data["relevant"] # 将向量列转为二维numpy数组 query_features = np.array(training_data["query vector"].tolist()) doc_features = np.array(training_data["doc vector"].tolist()) # 水平拼接两个特征数组,得到最终输入矩阵 X = np.hstack([query_features, doc_features]) clf = LogisticRegression() clf.fit(X, y)
报错原因说明
之前出现ValueError: setting an array element with a sequence是因为直接传入DataFrame时,数据是嵌套的列表结构,Sklearn无法识别这种格式。必须将每个样本的两个向量合并为一个一维特征,最终输入矩阵的形状应为(样本数量, 查询向量长度+文档向量长度),才能被模型正确处理。
内容的提问来源于stack exchange,提问作者LimeFire
相关产品推荐
相关产品推荐

