Что я делаю?Обработка категориальных функций с использованием scikit-learn
Я решаю проблему классификации с использованием случайных лесов. У меня есть набор строк фиксированной длины (длиной 10 символов), которые представляют последовательности ДНК. Алфавит ДНК состоит из 4 букв, а именно A
, C
, G
, T
.
Вот пример из моих исходных данных:
ATGCTACTGA
ACGTACTGAT
AGCTATTGTA
CGTGACTAGT
TGACTATGAT
Каждой последовательность ДНК поставляется с экспериментальными данными, описывающими реальную биологическую реакцию; было обнаружено, что молекула вызывает биологический ответ (1) или нет (0).
Проблема:
Обучающий набор состоит из обоих, категориальные (номинальные) и числовые характеристики. Он имеет следующую структуру:
training_set = [
{'p1':'A', 'p2':'T', 'p3':'G', 'p4':'C', 'p5':'T',
'p6':'A', 'p7':'C', 'p8':'T', 'p9':'G', 'p10':'A',
'mass':370.2, 'temp':70.0},
{'p1':'A', 'p2':'C', 'p3':'G', 'p4':'T', 'p5':'A',
'p6':'C', 'p7':'T', 'p8':'G', 'p9':'A', 'p10':'T',
'mass':400.3, 'temp':67.2},
]
target = [1, 0]
Я успешно создать классификатор с помощью DictVectorizer класс для кодирования номинальных функций, но у меня возникают проблемы при выполнении предсказания на моих тестовых данных.
Ниже упрощенная версия моего кода выполняется до сих пор:
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction import DictVectorizer
training_set = [
{'p1':'A', 'p2':'T', 'p3':'G', 'p4':'C', 'p5':'T',
'p6':'A', 'p7':'C', 'p8':'T', 'p9':'G', 'p10':'A',
'mass':370.2, 'temp':70.0},
{'p1':'A', 'p2':'C', 'p3':'G', 'p4':'T', 'p5':'A',
'p6':'C', 'p7':'T', 'p8':'G', 'p9':'A', 'p10':'T',
'mass':400.3, 'temp':67.2},
]
target = [1, 0]
vec = DictVectorizer()
train = vec.fit_transform(training_set).toarray()
clf = RandomForestClassifier(n_estimators=1000)
clf = clf.fit(train, target)
# The following part fails.
test_set = {
'p1':'A', 'p2':'T', 'p3':'G', 'p4':'C', 'p5':'T',
'p6':'A', 'p7':'C', 'p8':'T', 'p9':'G', 'p10':'A',
'mass':370.2, 'temp':70.0}
vec = DictVectorizer()
test = vec.fit_transform(test_set).toarray()
print clf.predict_proba(test)
В результате, я получил сообщение об ошибке:
ValueError: Number of features of the model must match the input.
Model n_features is 20 and input n_features is 12
возможно duplica te [как заставить scikit-learn DictVectorizer не отбрасывать функции?] (http://stackoverflow.com/questions/19770147/how-to-force-scikit-learn-dictvectorizer-not-to-discard-features) –