import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from gensim.sklearn_api import D2VTransformer
data = pd.read_csv('https://pastebin.com/raw/bSGWiBfs')
np.random.seed(0)
X_train = data.apply(lambda r: simple_preprocess(r['text'], min_len=2), axis=1)
y_train = data.label
model = D2VTransformer(size=10, min_count=1, iter=5, seed=1)
clf = LogisticRegression(random_state=0)
pipeline = Pipeline([
('vec', model),
('clf', clf)
])
pipeline.fit(X_train, y_train)
score = pipeline.score(X_train, y_train)
print("Score:", score) # This works
cval = cross_val_score(pipeline, X_train, y_train, scoring='accuracy', cv=3)
print("Cross-Validation:", cval) # This doesn't work
密钥错误:0
我通过将cross_val_score
中的X_train
替换为model.transform(X_train)
或model.fit_transform(X_train)
来进行实验。此外,我尝试了对原始输入数据(data.text
)进行同样的处理,而不是预处理文本。我怀疑用于交叉验证的x_train
的格式一定有问题,而用于管道的.score
函数工作得很好。我还注意到cross_val_score
与countvectorizer()
一起工作。
有人发现错误了吗?
不,这与从model
转换无关。它与cross_val_score
有关。
cross_val_score
将根据cv
参数拆分提供的数据。为此,它会做这样的事情:
for train, test in splitter.split(X_train, y_train):
new_X_train, new_y_train = X_train[train], y_train[train]
但是您的x_train
是一个pandas.series
对象,其中基于索引的选择不能像这样工作。请参阅:https://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-position
X_train = data.apply(lambda r: simple_preprocess(r['text'], min_len=2), axis=1)
# Access the internal numpy array
X_train = data.apply(lambda r: simple_preprocess(r['text'], min_len=2), axis=1).values
OR
# Convert series to list
X_train = data.apply(lambda r: simple_preprocess(r['text'], min_len=2), axis=1).tolist()
我有一个相对大的数据: 超过37万个观测数据,分类因变量有250个水平,10个自变量包括数值变量和分类变量。 下面是我的代码: 有人告诉我包'CV tools'或'cert'可以预形成k-folds CV,但我仍然不能成功地执行这些包或函数。
问题内容: 我想通过交叉验证从Logistic回归模型预测概率。我知道您可以获取交叉验证分数,但是可以从predict_proba返回值而不是分数吗? 问题答案: 现在,这已作为scikit- learn版本0.18的一部分实现。您可以将’method’字符串参数传递给cross_val_predict方法。文档在这里。 例: 还要注意,这是新的sklearn.model_selection包的一
我正在训练一个数据集,然后在其他数据集上测试它。
在ngram模型(字符ngram或单词袋)中,我们需要确保测试数据的词汇不被用于拟合或训练模型。 这就是sklearn TfidfVectorizer函数对两个函数(fit和transform)所做的操作。 还是一开始就适合模型一次(第一次)?
本示例利用Akaike信息判据(AIC)、Bayes信息判据(BIC)和交叉验证,来筛选Lasso回归的正则化项参数alpha的最优值。 通过LassoLarsIC得到的结果,是基于AIC/BIC判据的。 这种基于信息判据(AIC/BIC)的模型选择非常快,但它依赖于对自由度的正确估计。该方式的假设模型必需是正确, 而且是对大样本(渐近结果)进行推导,即,数据实际上是由该模型生成的。当问题的背景条
交叉验证 那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预