Machine learning 我的RandomForest不断为模型返回完全相同的概率。无论输入如何,预测概率()

Machine learning 我的RandomForest不断为模型返回完全相同的概率。无论输入如何,预测概率(),machine-learning,random-forest,Machine Learning,Random Forest,根据血糖、血压、BMI和年龄等参数,该代码可以预测糖尿病发生的可能性: 我首先必须修剪掉我不需要的柱子: df=pd.read_csv('diabetes.csv') keep_col = ['Glucose', 'BloodPressure','BMI', 'Age', 'Outcome'] df = df[keep_col] df.to_csv('newFile.csv', index=False) 然后我不得不平衡数据集,因为没有糖尿病的患者数量是其他患者的两倍

根据血糖、血压、BMI和年龄等参数,该代码可以预测糖尿病发生的可能性:

我首先必须修剪掉我不需要的柱子:

 df=pd.read_csv('diabetes.csv')
    keep_col = ['Glucose', 'BloodPressure','BMI', 'Age', 'Outcome']
    df = df[keep_col]
    df.to_csv('newFile.csv', index=False)
然后我不得不平衡数据集,因为没有糖尿病的患者数量是其他患者的两倍:

shuffled_df = df.sample(frac=1,random_state=4)
fraud_df = df.loc[shuffled_df['Outcome'] == 1]
non_fraud_df = shuffled_df.loc[shuffled_df['Outcome'] == 0].sample(n=684,random_state=42)
df = pd.concat([fraud_df, non_fraud_df])
制作培训和测试集:

X = df.iloc[:,:-1].values
Y = df.iloc[:,-1].values

X_train, X_test, Y_train, Y_test = train_test_split(X,Y, test_size = 0.25)

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
培训模型:

model = RandomForestClassifier(n_estimators=1, criterion='entropy', random_state=1)
model.fit(X_train, Y_train)
测试精度,这通常会返回到任何地方。95-1:

model.score(X_train, Y_train)
打印真负片、真正片、假负片和假正片的数量:

cm = confusion_matrix(Y_test, model.predict(X_test))

TN = cm[0][0]
TP = cm[1][1]
FN = cm[1][0]
FP = cm[0][1]

print(cm)

print('Model Test Accuracy = {}'. format( (TP + TN )/ (TP + TN + FN + FP) ) )
模型试验精度通常在80%以上

最后,当我使用该模型进行新预测时,例如:

model.predict_proba([[140,77,25,30]])
它总是返回相同的值,例如“数组([.3,[.6]]),即使我将血糖从140切换到190,或者如果我将BMI从25切换到30等等。概率变化的唯一时间是当我改变估计数的数量时,但即使如此,它们也不会随着不同的输入而变化


对此问题的任何帮助都将不胜感激

如前所述,一个随机林通常由几棵树(估计数)组成,因此您应该将其更改为例如100。由于变量如此之少,不同的
X
不太可能得到相同的概率,因为它们可能都在同一个叶中。您是否尝试过更显著地更改
X
值,例如将它们全部设置为0或非常小而不是非常高的值?如果运行
model.predict\u proba(X\u test)
,它会返回什么?另外,我不知道你的树有多深,所以你可能也必须改变它以获得更多的异质性


仅供参考,这是优化随机林参数的一个很好的指南:

请注意,n_估计器是随机林中的树数。您将树的数量设置为1,这意味着它不再是一个集合。您可能还需要更改随机林的其他参数。您好,欢迎使用SO。(1) 返回的值总和不等于1,这似乎很奇怪。(2) 为了增加获得有用答案的机会,如果您提供再现所述行为的最小工作示例,可能会有所帮助。(3) 而且,严格地说,这不是编码问题,因此您可能有更好的机会在