我构建了一个逻辑回归模型,并使用scikit pipeline进行了预处理。我进行了训练和测试,一切正常,但当我尝试在验证数据上校准我的模型时,在calib_clf.fit(Valid, labelValid)
处出现了错误
ValueError: 无法将字符串转换为浮点数:'OLIFE'
这是我的代码:
column_trans = make_column_transformer( (OneHotEncoder(), ['PRODUCT_LINE_ID','SMOKING_STATUS','gender','Cover_Type']), remainder = StandardScaler() )column_trans.fit_transform(train)# 创建一个管道,先缩放数据,然后训练一个支持向量分类器logreg = LogisticRegression()model_pipeline = make_pipeline(column_trans, logreg)# 拟合模型管道model_pipeline.fit(train,labelTrain)# 在新数据/测试数据上测试模型管道predictions = model_pipeline.predict_proba(test)[:,1]calib_clf = CalibratedClassifierCV(model_pipeline, method="sigmoid", cv="prefit")calib_clf.fit(Valid, labelValid)
回答:
我使用了幸福与抑郁的数据集。对于交叉验证的折数,我使用了3而不是prefit。
calibrated_clf = CalibratedClassifierCV(base_estimator=pipeline['clf'], method="sigmoid", cv=3) calibrated_clf.fit(X, y) print(calibrated_clf.predict_proba(X)[:5, :])
输出:(事件发生和不发生的概率)
[[0.97151521 0.02848479] [0.9953179 0.0046821 ] [0.01829911 0.98170089] [0.99405208 0.00594792] [0.82948843 0.17051157]]
概率输出表明数据行为在所有情况下并不一致。这可能是我将中度抑郁合并以创建二项分布的原因。中度抑郁需要分层,并需要发现新的目标变量。