Predict() 与 sklearn LogisticRegression

我正在建立一个Logistic回归模型,以仅包含150个观察值的数据集来预测交易是否有效(1)(0)。我的数据在两个类之间的分配情况如下:

  • 106个观察值为0(无效)

  • 44个观察值为1(有效)

我正在使用两个预测变量(都是数值)。尽管数据大多为0,但我的分类器只为我的测试集中的每笔交易预测1,即使大多数交易应为0。分类器从不为任何观察输出0。

这是我的整个代码:

# Logistic Regression

import numpy as np

import pandas as pd

from pandas import Series, DataFrame


import scipy

from scipy.stats import spearmanr

from pylab import rcParams

import seaborn as sb

import matplotlib.pyplot as plt

import sklearn

from sklearn.preprocessing import scale

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split

from sklearn import metrics

from sklearn import preprocessing


address = "dummy_csv-150.csv"

trades = pd.read_csv(address)

trades.columns=['location','app','el','rp','rule1','rule2','rule3','validity','transactions']

trades.head()


trade_data = trades.ix[:,(1,8)].values

trade_data_names = ['app','transactions']


# set dependent/response variable

y = trades.ix[:,7].values


# center around the data mean

X= scale(trade_data)


LogReg = LogisticRegression()


LogReg.fit(X,y)

print(LogReg.score(X,y))


y_pred = LogReg.predict(X)


from sklearn.metrics import classification_report


print(classification_report(y,y_pred)) 


log_prediction = LogReg.predict_log_proba(

    [

       [2, 14],[3,1], [1, 503],[1, 122],[1, 101],[1, 610],[1, 2120],[3, 85],[3, 91],[2, 167],[2, 553],[2, 144]

    ])

prediction = LogReg.predict([[2, 14],[3,1], [1, 503],[1, 122],[1, 101],[1, 610],[1, 2120],[3, 85],[3, 91],[2, 167],[2, 553],[2, 144]])


梦里花落0921
浏览 229回答 1
1回答

UYOU

您没有扩展test数据。当你这样做时,你是正确的缩放你的火车数据:X= scale(trade_data)训练模型后,您不会对测试数据执行相同的操作:log_prediction = LogReg.predict_log_proba([   [2, 14],[3,1], [1, 503],[1, 122],[1, 101],[1, 610],[1, 2120],[3, 85],[3, 91],[2, 167],[2, 553],[2, 144]])您的模型的系数是根据标准化输入构建的。您的测试数据未标准化。模型的任何正系数都将乘以一个巨大的数字,因为您的数据没有按比例缩放,可能会导致您的预测值全部为 1。一般规则是,您在训练集上进行的任何转换都应该在测试集上进行。您还应该对训练集和测试集应用相同的变换。代替:X = scale(trade_data)您应该从您的训练数据中创建一个缩放器,如下所示:scaler = StandardScaler().fit(trade_date)X = scaler.transform(trade_data)然后稍后将该缩放器应用于您的test数据:scaled_test = scaler.transform(test_x)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python