0

我是新来的机器学习和第一次尝试Sklearn。我有两个数据框,一个用于训练逻辑回归模型(具有10倍交叉验证)的数据和另一个用于使用该模型预测类('0,1')的数据。 这里是我到目前为止的代码使用教程我在Sklearn文档和Web上发现的位:逻辑回归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(),所以我真的不知道我的模型是否“适合”并可用于进行预测。

+0

发布一些数据。打印出df和df_data – skrubber

回答

1

我一般的东西都没问题,但也有一些问题。

  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) 
  • 交叉验证和预测。 你的代码如何工作?你将数据分成10次进入训练和保持组;在火车上设置10次适合的模型,并计算出阻止设置的分数。这样您就可以得到交叉验证分数,但该模型仅适用于部分数据。因此,这将更好地适应于整个数据集模型,然后做一个预测:

    LogReg.fit(X, y) 
    novel = LogReg.predict(X_pred) 
    
  • 我要注意的还有先进的像堆叠和提高工艺,但是如果你学习使用sklearn,然后坚持基本要好。