Logistic regression sklearn – 训练和应用模型

我是机器学习的新手,第一次尝试使用Sklearn。我有两个数据框,一个用于训练逻辑回归模型(使用10倍交叉验证),另一个用于使用该模型预测类别(’0,1’)。这是我迄今为止的代码,部分参考了Sklearn文档和网络上的教程:

import pandas as pdimport numpy as npimport sklearnfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import KFoldfrom sklearn.preprocessing import normalizefrom sklearn.preprocessing import scalefrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import cross_val_predictfrom sklearn import metrics# 导入训练数据的数据框df = pd.read_csv('summary_44.csv')cols = df.columns.drop('num_class') # 使用的数据(num_class是包含类别的列)# 导入用于预测的数据框df_pred = pd.read_csv('new_predictions.csv')# 得分df_data = df.ix[:,:-1].values# 目标df_target = df.ix[:,-1].values# 待预测的值df_test = df_pred.ix[:,:-1].values# 得分的名称df_data_names = cols.values# 缩放X, X_pred, y = scale(df_data), scale(df_test), df_target# 定义折数kf = KFold(n_splits=10)kf.get_n_splits(X) # 返回交叉验证器中的分割迭代次数# 逻辑回归标准化变量LogReg = LogisticRegression()# 10倍交叉验证scores = [LogReg.fit(X[train], y[train]).score(X[test], y[test]) for train, test in kf.split(X)]print scores# 预测新数据novel = LogReg.predict(X_pred)

这种实现逻辑回归的方式正确吗?我知道fit()方法应该在交叉验证之后使用,以便训练模型并用于预测。然而,由于我在列表推导式中调用了fit(),我实在不知道我的模型是否已经被“拟合”并且可以用于预测。


回答:

总体来说,事情还算可以,但存在一些问题。

  1. 缩放

    X, X_pred, y = scale(df_data), scale(df_test), df_target

您独立地缩放了训练和测试数据,这是不正确的。两个数据集必须使用同一个缩放器进行缩放。“scale”是一个简单的函数,但最好使用其他东西,例如StandardScaler。

scaler = StandardScaler()scaler.fit(df_data)X = scaler.transform(df_data)X_pred = scaler.transform(df_test)
  1. 交叉验证和预测。您的代码是如何工作的?您将数据分成10次训练和保留集;10次在训练集上拟合模型并在保留集上计算得分。这样您可以得到交叉验证得分,但模型仅在部分数据上拟合。因此,最好在整个数据集上拟合模型,然后进行预测:

    LogReg.fit(X, y)novel = LogReg.predict(X_pred)

我想指出,有一些高级技术如堆叠和提升,但如果您使用sklearn学习,那么最好坚持基础知识。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注