使用 Scikit Learn 获取预测元素的百分比

Get percentages of predicted elements using Scikit Learn

我使用以下代码创建了一个 scikit RandomForest 模型 并训练它然后保存它:

import pandas as pd 
import sklearn
from pandas import Series, DataFrame
from sklearn.model_selection import train_test_split
import sklearn.metrics
from sklearn.ensemble import RandomForestClassifier
import pickle

data = pd.read_csv("data_30000_30.csv")
data.head() #Just to give you an idea about how my CSV file looks like
feature_cols = ["width1", "width2", "width3", "width4", "width5", "width6", "width7", "width8", "width9", "width10"]

x = data[feature_cols]
y = data.label
x_train, x_test, y_train, y_test = train_test_split(x, y , test_size = 0.3)



classifier = RandomForestClassifier(n_estimators = 100)
classifier.fit(x_train, y_train)
predictions = classifier.predict(x_test)
conf_matrix = sklearn.metrics.confusion_matrix(y_test, predictions)
print(conf_matrix)
print(sklearn.metrics.accuracy_score(y_test, predictions))

with open('myclassifier.pkl', 'wb') as fid:
    pickle.dump(classifier, fid)
fid.close()

一切顺利,我得到了以下输出:

CSV文件头:

分类器的参数:

RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)

conf_matrix的输出:

array([[6272, 2513,   26,  153,   54],
       [3073, 5634,   37,  322,   27],
       [   1,    5, 5057,  775, 3072],
       [  22,   65,  429, 8245,  208],
       [  58,   50, 1458,  509, 6935]])

准确率:

0.7142888888888889

然后我使用以下代码加载我保存的预训练模型并使用新数据对其进行测试:

import pandas as pd 
import sklearn
from pandas import Series, DataFrame
from sklearn.model_selection import train_test_split
import sklearn.metrics
import pickle


with open('saved_model/myclassifier.pkl', 'rb') as fid:
    classifier = pickle.load(fid)
fid.close()
data = pd.read_csv("testing_loaded_model/Ttest_model_30.csv")
Ypredict = classifier.predict(data) 
print(Ypredict)

此代码的输出是一个包含预测元素名称的数组(即 ['Cube' 'Cylinder' 'Pyramid' 'Cube'...]

但是,我想获取数组元素加上它们的百分比,scikit库中有没有函数可以获取百分比,或者我应该计算它?
提前感谢您耐心阅读整个说明。

希望我能正确理解你的问题:

有一种方法可以得到概率。

scikit-learn 中的随机森林以及许多其他分类器提供了 predict_proba 功能。 使用该函数,您将获得一个数组,其中包含代表特定列的特定 类 的概率。

所以在你的例子中你可以这样写:

predictions = classifier.predict_proba(data)