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