Получите процент предсказанных элементов, используя Scikit Learn - PullRequest
0 голосов
/ 29 июня 2018

Я использовал следующий код для создания 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:

enter image description here

Параметры классификатора:

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 library функция для получения процента, или я вычислю ее?
Заранее благодарим за терпение, прочитавшее описание целиком.

1 Ответ

0 голосов
/ 29 июня 2018

Надеюсь, я правильно понял ваш вопрос:

Есть способ получить вероятности.

случайные леса в scikit-learn, а также во многих других классификаторах предоставляют функцию predict_proba. используя эту функцию, вы получите массив с вероятностями для определенных классов, представляющих определенный столбец.

Итак, в вашем примере вы могли бы написать:

predictions = classifier.predict_proba(data)
...