алгоритм дерева решений по набору функций - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь предсказать обновления no.of ('sys_mod_count') на основе текстового описания ('eng')

Я предопределил 'sys_mod_count' на два класса, если> = 17 как1;<17 как 0. </p>

Но я хочу удалить это условие, так как это значение недоступно во время принятия решения в реальном мире.

Я думаю сделать это в Дерево решений/ Случайный лес метод обучения классификатора по набору функций.


def train_model(classifier, feature_vector_train, label, feature_vector_valid, is_neural_net=False):
    # fit the training dataset on the classifier
    classifier.fit(feature_vector_train, label)
    # predict the labels on validation dataset
    predictions = classifier.predict(feature_vector_valid)
    # return metrics.accuracy_score(predictions, valid_y)
    return predictions

import pandas as pd
from sklearn import model_selection, preprocessing, linear_model, naive_bayes, metrics, svm
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer

df_3 =pd.read_csv('processedData.csv', sep=";")
st_new = df_3[['sys_mod_count','eng','ger']]
st_new['updates_binary'] = st_new['sys_mod_count'].apply(lambda x: 1 if x >= 17 else 0)
st_org = st_new[['eng','updates_binary']]
st_org = st_org.dropna(axis=0, subset=['eng']) #Determine if column 'eng'contain missing values are removed
train_x, valid_x, train_y, valid_y = model_selection.train_test_split(st_org['eng'], st_org['updates_binary'],stratify=st_org['updates_binary'],test_size=0.20)
tfidf_vect = TfidfVectorizer(analyzer='word', token_pattern=r'\w{1,}', max_features=5000)
tfidf_vect.fit(st_org['eng'])
xtrain_tfidf =  tfidf_vect.transform(train_x)
xvalid_tfidf =  tfidf_vect.transform(valid_x)

# Naive Bayes on Word Level TF IDF Vectors
accuracy = train_model(naive_bayes.MultinomialNB(), xtrain_tfidf, train_y, xvalid_tfidf)
print ("NB, WordLevel TF-IDF: ", metrics.accuracy_score(accuracy, valid_y))


1 Ответ

0 голосов
/ 31 мая 2019

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

Если у вас есть какой-то способ определить, какая двоичная метка правильная, тогда вы можете изменить порог и измерить ошибки, аналогично тому, как это предлагается здесь .Затем вы можете запустить Классификатор для ваших двоичных меток на основе порога или Регрессор на sys_mod_count и преобразовать в двоичный файл на основе указанного порога.

Приведенный выше подход не работает, если у вас нет способа определить, какой должна быть правильная двоичная метка.Затем проблема, которую вы пытаетесь решить, заключается в создании некоторой границы между точками на основе значения вашей переменной sys_mod_count.Это неконтролируемое обучение.Таким образом, такие методы, как кластеризация, будут полезны здесь.Вы можете кластеризовать ваши данные в два кластера, основываясь на расстоянии точек друг от друга, а затем пометить каждый кластер, который станет вашим двоичным меткой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...