目标:确定rfq_num_of_dealers是否是完成交易的重要预测因子(Done = 1)。
我的数据:
df_Train_Test.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 139025 entries, 0 to 139024
Data columns (total 2 columns):
rfq_num_of_dealers 139025 non-null float64
Done 139025 non-null uint8
dtypes: float64(1), uint8(1)
df_Train_Test = df_Train_Test[['rfq_num_of_dealers','Done']]
df_Train_Test_GrpBy = df_Train_Test.groupby(['rfq_num_of_dealers','Done']).size().reset_index(name='Count').sort_values(['rfq_num_of_dealers','Done'])
display(df_Train_Test_GrpBy)
列rfq_num_of_dealers数据范围为0到21,列Done为0或1.请注意,所有rfq_num_of_dealers的完成值均为0或1.
逻辑回归:
x = df_Train_Test[['rfq_num_of_dealers']]
y = df_Train_Test['Done']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42)
# 2 Train and fit a logistic regression model on the training set.
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression() # create instance of model
logmodel.fit(x_train,y_train) # fit model against the training data
# 3. Now predict values for the testing data.
predictions = logmodel.predict(x_test) # Predict off the test data (note fit model is off train data)
# 4 Create a classification report for the model.
from sklearn.metrics import classification_report
print(classification_report(y_test,predictions))
# 5 Create a confusion matrix for the model.
from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test,predictions)) # The diagonals are the correct predictions
这会产生以下错误
UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.
'precision', 'predicted', average, warn_for)
报告和矩阵显然是错误的,请注意混淆矩阵的右侧
precision recall f1-score support
0 0.92 1.00 0.96 41981
1 0.00 0.00 0.00 3898
avg / total 0.84 0.92 0.87 45879
[[41981 0]
[ 3898 0]]
如果&#39;完成&#39;如何引发此错误?有1或0并且所有都填充(y标签)?是否有任何代码可以运行以确定哪些y标签导致错误?其他outpuuts:
display(pd.Series(predictions).value_counts())
0 45879
dtype: int64
display(pd.Series(predictions).describe())
count 45879.0
mean 0.0
std 0.0
min 0.0
25% 0.0
50% 0.0
75% 0.0
max 0.0
dtype: float64
display(y_test)
71738 0
39861 0
16567 0
81750 1
88513 0
16314 0
113822 0
. .
display(y_test.describe())
count 45879.000000
mean 0.084963
std 0.278829
min 0.000000
25% 0.000000
50% 0.000000
75% 0.000000
max 1.000000
Name: Done, dtype: float64
display(y_test.value_counts())
0 41981
1 3898
Name: Done, dtype: int64
这可能与rfq_num_of_dealers和Done等于零的12439条记录有关吗?
答案 0 :(得分:2)
精确度是一个比率:
precision = tp /(tp + fp)
错误告诉你这个比例是不确定的,几乎肯定是因为分母是0.也就是说,没有测试真阳性和误报。看看这些共性,这些都是测试积极因素。
您的分类器很可能根本不会预测测试数据的正数。
在进入训练和测试之前,你可能想要随机化你的实例的顺序(或分层) - 它可能是关于原始顺序的系统性的东西。这可能解决了问题与否,但同样,问题是测试数据集中缺少预测的真实性。