相关疑难解决方法(0)

sklearn.svm.svc的函数predict_proba()如何在内部工作?

我正在使用scikit中的sklearn.svm.svc学习二进制分类.我正在使用它的predict_proba()函数来获得概率估计.谁能告诉我predict_proba()如何在内部计算概率?

python svm scikit-learn

39
推荐指数
1
解决办法
3万
查看次数

在Scikit Learn中控制Logistic回归中的阈值

LogisticRegression()scikit-learn高度不平衡的数据集中使用该 方法.我甚至把这个class_weight功能变成了auto.

我知道在Logistic回归中,应该可以知道特定一对类的阈值是多少.

是否有可能知道该LogisticRegression()方法设计的每个一对一类的阈值是多少?

我没有在文档页面中找到任何内容.

它是否默认将0.5值作为所有类的阈值应用,而不管参数值如何?

classification machine-learning scikit-learn logistic-regression

15
推荐指数
4
解决办法
3万
查看次数

如何根据ROC结果设置sklearn分类器的阈值?

我使用scikit-learn训练了ExtraTreesClassifier(gini索引),它非常适合我的需求.准确性不是很好,但使用10倍交叉验证,AUC为0.95.我想在我的工作中使用这个分类器.我对ML很新,所以如果我问你一些概念错误的话,请原谅我.

我绘制了一些ROC曲线,通过它,我似乎有一个特定的阈值,我的分类器开始表现良好.我想在拟合的分类器上设置这个值,所以每次我调用预测时,分类器都会使用该阈值,我可以相信FP和TP的速率.

我也来到这篇文章(scikit .predict()默认阈值),其中声明阈值不是分类器的通用概念.但由于ExtraTreesClassifier的方法是predict_proba,并且ROC曲线也与thresdholds定义有关,所以在我看来我应该可以指定它.

我没有找到任何参数,也没有找到任何类/接口来实现它.如何使用scikit-learn为训练有素的ExtraTreesClassifier(或任何其他人)设置阈值?

非常感谢,科利斯

python classification threshold roc scikit-learn

15
推荐指数
1
解决办法
1万
查看次数

Scikit - 更改阈值以创建多个混淆矩阵

我正在建立一个分类器,通过贷款俱乐部数据,并选择最好的X贷款.我训练了一个随机森林,并创建了通常的ROC曲线,混淆矩阵等.

混淆矩阵将分类器的预测(森林中树木的多数预测)作为参数.但是,我希望在不同的阈值下打印多个混淆矩阵,知道如果我选择10%最佳贷款,20%最佳贷款等会发生什么.

我从阅读其他问题中知道,改变门槛通常是一个坏主意,但有没有其他方法可以看到这些情况下的混淆矩阵?(问题A)

如果我继续更改阈值,我应该假设这样做的最佳方法是预测问题然后手动阈值,将其传递给混淆矩阵?(问题B)

classification threshold confusion-matrix random-forest scikit-learn

8
推荐指数
1
解决办法
3329
查看次数

获得较低的ROC AUC分数,但准确度较高

航班延误数据集的版本中使用LogisticRegression类.scikit-learn

pandas用来选择一些列:

df = df[["MONTH", "DAY_OF_MONTH", "DAY_OF_WEEK", "ORIGIN", "DEST", "CRS_DEP_TIME", "ARR_DEL15"]]
Run Code Online (Sandbox Code Playgroud)

NaN用0 填写值:

df = df.fillna({'ARR_DEL15': 0})
Run Code Online (Sandbox Code Playgroud)

确保分类列标有"类别"数据类型:

df["ORIGIN"] = df["ORIGIN"].astype('category')
df["DEST"] = df["DEST"].astype('category')
Run Code Online (Sandbox Code Playgroud)

然后调用get_dummies()来自pandas:

df = pd.get_dummies(df)
Run Code Online (Sandbox Code Playgroud)

现在我训练和测试我的数据集:

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()

test_set, train_set = train_test_split(df, test_size=0.2, random_state=42)

train_set_x = train_set.drop('ARR_DEL15', axis=1)
train_set_y = train_set["ARR_DEL15"]

test_set_x = test_set.drop('ARR_DEL15', axis=1)
test_set_y = test_set["ARR_DEL15"]

lr.fit(train_set_x, train_set_y)
Run Code Online (Sandbox Code Playgroud)

一旦我调用该score方法,我就会得到0.867.但是,当我调用该roc_auc_score方法时,我得到的数字大约低于0.583

 probabilities = lr.predict_proba(test_set_x)

 roc_auc_score(test_set_y, …
Run Code Online (Sandbox Code Playgroud)

classification machine-learning scikit-learn logistic-regression auc

6
推荐指数
2
解决办法
7681
查看次数

如何在python中计算10倍折叠交叉验证的不平衡数据集的精度,召回率和f1分数

我有一个包含二进制分类问题的不平衡数据集.我已经构建了随机森林分类器并使用了10倍折叠交叉验证.

kfold = model_selection.KFold(n_splits=10, random_state=42)
model=RandomForestClassifier(n_estimators=50) 
Run Code Online (Sandbox Code Playgroud)

我得到了10倍的结果

results = model_selection.cross_val_score(model,features,labels, cv=kfold)
print results
[ 0.60666667  0.60333333  0.52333333  0.73        0.75333333  0.72        0.7
  0.73        0.83666667  0.88666667]
Run Code Online (Sandbox Code Playgroud)

我通过取结果的均值和标准差来计算准确度

print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0)
Accuracy: 70.900% (10.345%)
Run Code Online (Sandbox Code Playgroud)

我计算了我的预测如下

predictions = cross_val_predict(model, features,labels ,cv=10)
Run Code Online (Sandbox Code Playgroud)

由于这是一个不平衡的数据集,我想计算每个折叠的精度,召回率和f1分数并对结果取平均值.如何计算python中的值?

python random-forest scikit-learn cross-validation supervised-learning

4
推荐指数
1
解决办法
6822
查看次数