2017-08-07 150 views
1

我对logistic regression比较新,使用Python中的SciKit learn。在阅读了一些主题并查看了一些演示之后,我决定自己跳水。使用逻辑回归做出预测(Python Sci Kit Learn)

所以,基本上,我试图根据一些功能预测客户的转换率。结果是有效(1)或未激活(0)。我试过KNN逻辑回归。用KNN我得到的平均准确度为0.893,逻辑回归为0.994。后者似乎如此之高,甚至是现实的/可能的?

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

我现在需要导入新的设置,以某种方式将该新设置适用于此模型。 (不再训练,现在我只是想用它)

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

提前致谢!

+1

精度/错误率不是唯一您应该查看的指标。你还应该看看分类准确度。例如:如果你有100行99个1和0,你的模型预测所有行100,你仍然有99%的准确性,但它可能是你的模型不擅长预测零。您可以通过取样/取样进行故障排除。 –

+1

训练好模型后,可以使用预测函数并将新数据传递给它。例如:如果'clf'是模型对象,那么你可以使用'clf.predict(test_data)'。这将返回预测。如果使用'.fit'并通过新的新数据集,模型将相应更新。如果你只需要预测并且不想改变模型,你应该直接使用'.predict'方法。SO回答你的问题,在这种情况下,你只需要预测,不需要拟合。 –

+0

谢谢,在我的数据集中Active(1)发生在68%,非活动(0)32%。所以这似乎是好的。 –

回答

1

对于统计问题:当然,可能会发生这种情况,您的数据可能没有什么噪音,或者评论中提到的场景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) 
+0

我想上的负载阶段,它应该是“rb”而不是“wb”。另外,为什么你需要“HIGHEST_PROTOCOL”? –

+1

1.是的,当然,谢谢你指出。显然,我们需要读取该文件,而不是覆盖它。 2.这更多的是我通过的一项公约。因为据我所知,协议2又名HIGHEST_PROTOCOL是最有效的。但是你可以使用'2'或'-1'而不用改变任何东西。没有定义协议,它是默认的0,这也可以工作,我猜。 –

+0

感谢您的精度。 –

1

除了 '泡菜', '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) 
+0

非常感谢Nati! –

+0

使用它有什么好处吗?实际上joblib是从scikit学习的,所以你已经在这方面有了它,但如果没有关于joblib的边缘,我倾向于主要使用标准库选项。 –