Алгоритм классификации - дерево решений - PullRequest
0 голосов
/ 04 июля 2018

У меня есть данные акселерометра MPU6050, полученные от асинхронного двигателя. Я хотел обучить алгоритм и делать прогнозы, используя новый набор данных.

Я обучил алгоритм с использованием классификатора дерева решений и получил 100% баллов, а также провел тестирование

Когда я пытаюсь дать новый набор данных этой модели, классификация выполняется неправильно. Я привел пример в конце кода.

Пожалуйста, найдите код ниже:

import pandas as pd
import numpy
import pickle
from pandas.tools.plotting import scatter_matrix
from matplotlib import cm

filename=pd.read_csv("C:/Users/Meena/Desktop/Datawithlabel.txt", sep=',')
filename.columns = ["x", "y", "z","Label"]

feature_names=['x']
X=filename[feature_names]
y=filename['Label']


from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=7)

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()

X_train = scaler.fit_transform(X_train)


from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier().fit(X_train, y_train)


print('Accuracy of Decision Tree classifier on training set: {:.2f}'
     .format(clf.score(X_train, y_train)))

Точность классификатора дерева решений на тренировочном наборе: 1.00

Filename='final_model.sav'
pickle.dump(clf,open(Filename,'wb'))
load_model=pickle.load(open(Filename,'rb'))
result=load_model.score(X_test,y_test)
print(result)

+0,9393939393939394

load_model=pickle.load(open(Filename,'rb'))

filename1=pd.read_csv("C:/Users/Meena/Desktop/Motor2withloadsafter5min.txt", sep=',')
filename1.columns = ["x", "y", "z"]
Datatopredict=filename1[['x']]

prediction = load_model.predict(Datatopredict)

print(prediction)

Несмотря на то, что для этих значений он задан как нерабочий класс в обучающем наборе, он все равно уступает в качестве рабочего класса в прогнозировании. Я не уверен, где это идет не так ...

В приведенных ниже данных первый столбец является индексом, а второй столбец - данными оси X от акселерометра

590  0.03
591  0.03
592  0.02
593  0.02
594  0.01
595  0.04
596  0.12
597  0.12
598  0.11
599  0.14

[«работающий» «работающий» «работающий» «работающий» «работающий» «работающий» «работающий» «работает» «работает» «работает»]

Это скриншот данных тренировки

1 Ответ

0 голосов
/ 04 июля 2018

Одна вещь, которую я заметил в дополнение к моему комментарию выше, это то, что вы не масштабируете тестовые значения.

Вам также необходимо использовать тот же масштабер на X_test, например: X_test = scaler.transform(X_test) перед прогнозированием. Так что засолите scaler и загрузите его во время тестирования. Во время тренировки:

Filename = 'final_model.sav'
pickle.dump(clf, open(Filename, 'wb'))

scaler_Filename = 'final_scalar.sav'
pickle.dump(scaler, open(scaler_Filename, 'wb'))

Во время тестирования:

load_scaler = pickle.load(open(scaler_Filename,'rb'))
X_test = load_scaler.transform(X_test)

load_model = pickle.load(open(Filename,'rb'))
result = load_model.score(X_test,y_test)

print(result)

По новым данным:

Datatopredict = load_scaler.transform(Datatopredict)
prediction = load_model.predict(Datatopredict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...