【问题标题】:Making predictions with logistic regression (Python Sci Kit Learn)使用逻辑回归进行预测(Python Scikit Learn)
【发布时间】:2018-01-14 10:22:03
【问题描述】:

我对在 Python 中使用 SciKit learnlogistic regression 比较陌生。在阅读了一些主题并查看了一些演示之后,我决定深入研究自己。

所以,基本上,我正在尝试根据一些功能来预测客户的转化率。结果是活动 (1) 或不活动 (0)。我尝试了 KNN逻辑回归。使用KNN,我得到0.893 和逻辑回归0.994 的平均准确度。后者似乎如此之高,这是否现实/可能?

无论如何:假设我的模型确实非常准确,我现在想导入具有相同特征列的新数据集并预测它们的转换(它们将在本月结束)。在上面的例子中,我使用cross_val_score 来获得准确度分数。

我现在是否需要导入新集,以某种方式使新集适合此模型。 (不再训练了,现在只想用)

有人可以告诉我如何进行吗?如果需要更多信息,请对此发表评论。

提前致谢!

【问题讨论】:

  • 准确率/错误分类率不是您应该查看的唯一指标。您还应该查看分类准确性。例如:如果您有 100 行,其中 99 个 1 和 1 个 0,并且您的模型预测所有行都是 100,那么您仍然有 99% 的准确度,但可能是您的模型不擅长预测零。您可以通过过度/不足采样来解决此问题。
  • 训练完模型后,您可以使用预测函数并将新数据传递给它。例如:如果clf 是模型对象,那么您可以使用clf.predict(test_data)。这将返回预测。如果您使用.fit 并传递新的新数据集,则模型将相应更新。如果您只需要预测并且不想更改模型,您应该直接使用.predict 方法。所以回答你的问题,在这种情况下你只需要预测,不需要拟合。
  • 谢谢,在我的数据集中,活跃 (1) 出现在 68% 中,不活跃 (0) 出现在 32% 中。所以这似乎没问题。
  • 感谢您的第二条评论。我想我可以使用 logreg.predict(mynewdata)。这是原始代码: from sklearn.linear_model import LogisticRegression logreg = LogisticRegression() logreg_scores = cross_val_score(logreg, X, y, cv=10, score='accuracy') print(logreg_scores)

标签: python machine-learning scikit-learn


【解决方案1】:

对于统计问题:当然,它可能会发生,要么您的数据噪音很小,要么是 cmets 中提到的场景 Clock Slave。

对于分类器的导入,您可以pickle它(将其保存为带有pickle模块的二进制文件,然后在需要时加载它并在新数据上使用clf.predict()方法

import pickle 

#Do the classification and name the fitted object clf
with open('clf.pickle', 'wb') as file :
    pickle.dump(clf,file,pickle.HIGHEST_PROTOCOL)

然后你就可以加载它了

import pickle 

with open('clf.pickle', 'rb') as file :
    clf =pickle.load(file)

# Now predict on the new dataframe df as 
pred = clf.predict(df.values)

【讨论】:

  • 我猜在加载阶段,应该是“rb”而不是“wb”。另外,为什么需要“HIGHEST_PROTOCOL”?
  • 1.是的,当然,谢谢你指出。显然,我们需要读取文件而不是覆盖它。 2. 这更像是我采用的约定。因为据我所知,协议 2 aka HIGHEST_PROTOCOL 是最有效的。但是您可以使用 2-1 代替,而无需更改任何内容。如果不定义协议,我猜它默认为 0 也可以。
  • 感谢您的精确。
【解决方案2】:

除了“Pickle”,还可以使用“joblib”。

## 
from sklearn.linear_model import LogisticRegression
from sklearn.externals import joblib

假设 X,Y 已经定义

model = LogisticRegression()
model.fit(X, Y)

将模型保存到磁盘

filename = 'finalized_model.sav'
joblib.dump(model, filename)

从磁盘加载模型

loaded_model = joblib.load(filename)
result = loaded_model.score(X_test, Y_test)

【讨论】:

  • 非常感谢纳蒂!
  • 使用它有什么好处吗?事实上 joblib 来自 scikit learn 所以你已经在这个上下文中拥有它,但如果没有关于 joblib 的优势,我倾向于主要使用标准库选项。
猜你喜欢
  • 2016-06-17
  • 1970-01-01
  • 2016-02-21
  • 2017-03-31
  • 2020-06-12
  • 2015-11-11
  • 2018-05-19
  • 2018-03-01
  • 2016-07-31
相关资源
最近更新 更多