为了账号安全,请及时绑定邮箱和手机立即绑定

Predict() 与 sklearn LogisticRegression

Predict() 与 sklearn LogisticRegression

梦里花落0921 2021-05-30 17:16:40
我正在建立一个Logistic回归模型,以仅包含150个观察值的数据集来预测交易是否有效(1)(0)。我的数据在两个类之间的分配情况如下:106个观察值为0(无效)44个观察值为1(有效)我正在使用两个预测变量(都是数值)。尽管数据大多为0,但我的分类器只为我的测试集中的每笔交易预测1,即使大多数交易应为0。分类器从不为任何观察输出0。这是我的整个代码:# Logistic Regressionimport numpy as npimport pandas as pdfrom pandas import Series, DataFrameimport scipyfrom scipy.stats import spearmanrfrom pylab import rcParamsimport seaborn as sbimport matplotlib.pyplot as pltimport sklearnfrom sklearn.preprocessing import scalefrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn import metricsfrom sklearn import preprocessingaddress = "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)].valuestrade_data_names = ['app','transactions']# set dependent/response variabley = trades.ix[:,7].values# center around the data meanX= scale(trade_data)LogReg = LogisticRegression()LogReg.fit(X,y)print(LogReg.score(X,y))y_pred = LogReg.predict(X)from sklearn.metrics import classification_reportprint(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]])
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您没有扩展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)


查看完整回答
反对 回复 2021-06-01
  • 1 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信