我有这个Credit Default数据集,头像是这样的:
default student balance income default_Yes
No No 729.526495 44361.625074 0
No Yes 817.180407 12106.134700 0
No No 1073.549164 31767.138947 0
No No 529.250605 35704.493935 0
No No 785.655883 38463.495879 0
我正在尝试根据'balance'属性对'default_Yes'执行逻辑回归,并使用以下函数:
from sklearn.cross_validation import train_test_split
from sklearn import metrics
X = cred_def[['balance']]
Y = cred_def['default_Yes']
X_train, X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.3,random_state=76)
logist = LogisticRegression()
logist.fit(X_train,Y_train)
y_pred = logist.predict(X_test)
def model(threshold):
def_thresh = np.greater(y_pred, threshold).astype(int)
acc_score = metrics.accuracy_score(Y_test, def_thresh)
print(acc_score)
plt.scatter(X_test.values,Y_test.values)
plt.scatter(X_test.values,def_thresh)
conf = metrics.confusion_matrix(Y_test, y_pred)
print(conf)
我面临的问题是:无论我传递给函数'model'的threshold
的值是什么,它都会产生相同的输出而不考虑传递的值。
答案 0 :(得分:1)
编辑(回复此问题陈述的前两个编辑):您不会将任何参数传递给logist = LogisticRegression()
。您将random_state=True
传递给train_test_split()
。不要LogisticRegression
。
random_state
应该是一个整数(随机种子),而不是布尔值 - 读取doc。因此,通过传递将被强制为1的True
,您只需继续设置random_state = 1
。
尝试使用其他一些整数值,你会得到不同的结果。
EDIT2:您的问题与最初标题为random_state
的参数无关。这与您的预测值y_pred = logist.predict(X_test)
有关,具体来说就是在LR输出值的可能范围[0,1]内扫描threshold
参数时的行为方式。向我们展示一个至少有五个不同阈值的表格。如[0,0.25,0.5,0.75,1.0],无论你的意思是什么,"结果"。接下来,你的意思是"结果"?您的准确度是否达到,您的混淆矩阵是什么,或者是什么?现在,忘记混淆矩阵。只需看看将不同阈值应用于同一预测值数组y_pred
的效果。此外,您需要完整性检查y_pred
,检查它。是全能吗?全零?它的意思是什么,中位数等。请发布一个数据表。不要只是继续说"它不起作用"。