scikit-learn - 如何从 Sklearn 逻辑预测中提取行特定信息
问题描述
我有一个逻辑回归来预测哪些客户会流失。我似乎无法在任何地方找到提取预计会流失的帐户的代码。Account Name 是一个字符串对象,所以我没有将它输入逻辑模型,但我需要将预测的流失行映射回原始表
这就是我的数据的样子,但是我无法以更小的样本大小复制这个问题:
import random
random_data = [['ABC', 'yes'],['AAA','yes'],
['BBB','no'],['XTZ','no'],['ADB','no']]
df = pd.DataFrame(random_data,columns=['Account','Target'])
df['height'] = random.sample(xrange(10), len(df))
df['weight'] = random.sample(xrange(10), len(df))
X_train_pd = df.drop(['Account','Target'], axis=1)
y_train_pd = df['Target']
logreg = LogisticRegression()
logreg.fit(X_train_pd, y_train_pd)
y_pred_train = logreg.predict(X_train_pd)
这是我尝试过的。它的 Hacky 和 Bug 显示在“Extract Account Names Predicted to Churn”下面
y_pred_prob_df = pd.DataFrame(logreg.predict_proba(X_test))
data = np.array([y_test_pd, y_pred_test ])
data_y = pd.DataFrame({'y_test':data[0],'y_pred_test':data[1]} )
ID = test[['Account Name', 'Status']]
Accounts=pd.concat([ID, data_y, y_pred_prob_df], axis=1)
这是 BUG:当我连接实际 y、预测 y、概率、原始数据集 (ID) 时,我得到了额外的几行。如果我拿出身份证,这解决了这个错误。
print ID.shape #(250, 2)
print data_y.shape #(250, 2)
print y_pred_prob_df.shape #(250, 2)
print Accounts.shape, "(267, 6) <-- BUG "
s=pd.concat([data_y, y_pred_prob_df], axis=1)
print s.shape, "(250, 4) <-- Resolves BUG: ID is the issue"
Hacky 方法行不通...我们只想提取预计会流失的帐户
我正在寻找的结果是一个数据框,其中包含我的所有特征、目标、预测的流失 flg 和预测的概率。具体来说,账户名称“ABC”预计会流失吗?可能是那个预测?以及进入模型的所有字段
解决方案
要获得预计会流失的帐户,您可以简单地编写:
df.loc[y_pred_train == "yes"]
并获得概率:
y_pred_prob_df.loc[y_pred_train == "yes"]
推荐阅读
- python - object has no attribute 'zero_state' [Tensorflow 2.0]
- reactjs - Why does tsc produce a React component with an empty name?
- android - New Date() object changes format when switching timezones
- c# - 如何将 COLORREF 中的所有数据返回给 C# 中的调用者
- kotlin - Kotlin Flows: StateFlow or distinct+conflated?
- django - 通过反向关系更新字段值。Django 休息
- c++ - strange return behavior in strcat()
- laravel - How to solve Uncaught SyntaxError: Unexpected token '<' using Vue JS / Laravel
- api - 如何找到 Web 应用程序的 API?无需任何工具
- javascript - 为所有地区应用相同的颜色谷歌地理图表