Поэтому я использую машинное обучение для прогнозирования класса некоторых данных, как показано ниже в примере.
Мои данные связаны с каким-то планировщиком, работающим на сервере, и по времени отправки и типу сервера я помечаю класс
Dataframe: df= sch_name server_type subit_time submit_by Class
RCALCAPP X3333 165703 AAAA 1
RCALCAPP X3333 105703 BBBB 0
PCALCAPP X3333 165703 AAAA 1
.
.
TCALCAPP X3344 095703 CCCC 0
Для запуска классификатора я делаю lableencoding для значений столбцов строки. Не уверен, что это правильный подход к экоде или нет, но он работает для меня
le = preprocessing.LabelEncoder()
df = df.apply(le.fit_transform)
Также мне не нужен столбец submit_by для обучения классификатора, поэтому я его удаляю
featureNames = [col for col in df.columns if col not in ['submit_by','status']]
Чтобы подготовить модель, которую я разбил на вышеупомянутом кадре данных, на тренировку, резюме, тестирование и использование ниже
trainFeatures = training[featureNames].values
trainClasses = training['status'].values
testFeatures= test[featureNames].values
testClasses = test['status'].values
clf = RandomForestClassifier()
clf.fit(trainFeatures, trainClasses)
score = clf.score(testFeatures, testClasses)
print(score) #.99823742
До сих пор все в порядке. Классификатор работает с данными. Но сейчас я хочу протестировать новый рекорд для классификации. Я пытался сделать следующее:
test_sch = ['TCALCAPP', 'X3344', '075703']
class_code = clf.predict(test_sch) # [1]
выдал ошибку
ValueError: could not convert string to float: 'TCALCAPP'
И я знаю причину, поскольку она не была закодирована в число. Вот моя проблема, как именно это сделать. Мне нужно передать закодированное значение для «TCALCAPP», «X3344». Но как бы я узнал закодированное значение для новых тестовых данных. Мой подход может быть неправильным, но требование такое же, как указано выше. Пожалуйста, помогите.