Logistic回归sklearn - 训练和应用模型

时间:2017-11-18 01:20:31

标签: python machine-learning scikit-learn logistic-regression sklearn-pandas

我是机器学习的新手,也是第一次尝试Sklearn。我有两个数据框,一个用于训练逻辑回归模型的数据(具有10倍交叉验证),另一个用于使用该模型预测类(' 0,1')。 到目前为止,我的代码使用了Sklearn文档和网络上的一些教程:

import pandas as pd
import numpy as np
import sklearn
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import KFold
from sklearn.preprocessing import normalize
from sklearn.preprocessing import scale
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
from sklearn import metrics


# Import dataframe with training data
df = pd.read_csv('summary_44.csv')
cols = df.columns.drop('num_class') # Data to use (num_class is the column with the classes)

# Import dataframe with data to predict
df_pred = pd.read_csv('new_predictions.csv')

# Scores
df_data = df.ix[:,:-1].values

# Target
df_target = df.ix[:,-1].values

# Values to predict
df_test = df_pred.ix[:,:-1].values

# Scores' names
df_data_names = cols.values

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

# Define number of folds
kf = KFold(n_splits=10)
kf.get_n_splits(X) # returns the number of splitting iterations in the cross-validator

# Logistic regression normalizing variables
LogReg = LogisticRegression()

# 10-fold cross-validation
scores = [LogReg.fit(X[train], y[train]).score(X[test], y[test]) for train, test in kf.split(X)]
print scores

# Predict new
novel = LogReg.predict(X_pred)

这是实施Logistic回归的正确方法吗? 我知道在交叉验证之后应该使用fit()方法来训练模型并将其用于预测。但是,因为我在列表理解中调用了fit(),所以我真的不知道我的模型是否适合#34;并可用于预测。

1 个答案:

答案 0 :(得分:1)

我一般情况还可以,但有一些问题。

  1. 缩放

    X, X_pred, y = scale(df_data), scale(df_test), df_target
    
  2. 您可以独立扩展训练和测试数据,这是不正确的。两个数据集必须使用相同的缩放器进行缩放。 “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)
      
    2. 我想注意到有堆叠和增强等高级技术,但如果你学习使用sklearn,那么最好坚持基础。