2016-12-08 3 views
-2

Учитывая проблему классификации, данные обучения выглядит следующим образом:Как классифицировать матрицы (или наборы данных)

input - output 
-------------- 
A  100 
B  150 
C  170 
.............. 

где A, B, C большие наборы данных, каждая из 6 переменных и около 5000 строк ,

Проблема заключается в следующем: как я могу завершить ввод, чтобы использовать алгоритм классификации для других входов данных, таких как эти.

Я попытался установить каждую строку значение классификатора обучения и обучить их как таковые. Для новой записи каждая строка будет классифицирована, и я бы взял среднее (среднее) значение в качестве классификатора для всего набора данных. Но у меня не было очень хороших результатов с использованием наивных байесов.

Должен ли я продолжать изучать этот метод с помощью других классификаторов? Какие еще варианты я мог бы изучить?

Редактировать

Выборочные данные из 2 событий

OUT Var1 Var2 Var3 Var4 Var5 Var6 
0 93 209.2 49.4 5451.0 254.0 206.0 37.7 
1  344.9 217.6 14590.5 191.7 175.5 106.8 
2  663.3 97.2 17069.2 144.4 2.8  59.9 
3  147.4 137.7 12367.4 194.1 237.7 116.2 
4  231.8 162.2 11938.4 71.3 149.1 116.3 

    OUT Var1 Var2 Var3 Var4 Var5 Var6 
964 100 44.5 139.7 10702.5 151.4 36.0 17.9 
966  59.8 148.9 3184.9 103.0 96.5 12.8 
967  189.7 194.4 7569.6 49.9 82.6 55.2 
969  158.5 88.2 2932.4 159.8 232.8 125.2 
971  226.4 155.2 3156.3 85.0 4010.5 69.9 

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

Правильно ли применять одно и то же значение ко всем строкам?

+0

Что? Я бы рекомендовал прочитать что-то вроде этого: [Введение в машинное обучение в scikit-learn] (http: // scikit-learn.орг/стабильный/учебник/базовый/tutorial.html). Кажется, что вам не хватает основополагающих принципов классификации машинного обучения. Но, да, вы можете * попробовать другие классификаторы. – blacksite

+0

Речь идет не о классификаторе, проблема в том, как обрабатывать данные. Переменные, с которыми я имею дело, не являются строковыми или числовыми, это целые наборы данных. – ashcrok

+0

Это также было бы полезно: [Сравнение классификаторов] (http://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) – blacksite

ответ

1

Посмотрите на one-hot encoding. Учитывая входную переменную x, которая имеет три различных класса (это часто называют «фактором»), для каждого уникального значения x вам нужен столбец с двоичным кодированием в вашем наборе данных, чтобы алгоритм машинного обучения понимал, с чем он имеет дело (т.е. он сможет узнать, почему данный класс 'A' соответствует различным выходным значениям).

Редактировать !!

Другой импорт примечание: то, что вы хотите сделать (т.е. отобразить некоторые функции на непрерывную переменную вывода в ), является не упоминается как «классификации.» Это называется «регрессия». В вашем случае проблема классификации была бы, если бы вы перевернули свои данные и попытались предсказать inputs (т. Е. A, B или C), учитывая ваши outputs (ваши непрерывные целые числа). Ниже я расскажу, как сделать регресс в вашем случае. Если вы попробуете классифицировать то, как вы описали, вы закончите иметь len(set(df['outputs'])) количество различных классов, которые вы пытаетесь предсказать. Классификация - это не подход к вашему сценарию.

Быстрый и грязный пример следующим образом:

import random 
from sklearn.linear_model import LogisticRegression 
from sklearn.cross_validation import train_test_split 
from sklearn.metrics import r2_score 
import pandas as pd 
import numpy as np 

inputs = ['A', 'B', 'C'] 

# create some random data similar to yours 
df = pd.DataFrame({'input': [random.choice(inputs) for _ in range(5000)], 'output': [int(abs(n) * 100) for n in np.random.randn(5000)]}) 

# one-hot-encode the categorical variable 'input' for use in classification 
dummies = pd.get_dummies(df['input']) 

# merge the one-hot-encoded dummies back with the original data 
df = df.join(dummies) 

# our feature matrix (input values as dummies) 
X = df[['A', 'B', 'C']] 

# our outcome variable 
y = df['output'] 

# split the dataset into train and test objects so we can gauge the accuracy of our classifier 
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.80, random_state = 100) 

# our model instance 
model = LogisticRegression() 

# train the classifier 
model.fit(X_train, y_train) 

# use trained model from above to predict the class of "new" data 
predicted = model.predict(X_test) 

# let's see how well the classifier performed 
print(r2_score(y_test, predicted)) 

Edit 2:

Чтобы ответить на ваш отредактированный вопрос, до тех пор, как строки в каждом образце из того же класса, то да, вы должны применить одно и то же значение к каждой из строк в образце. Для вашего первого «события» выше, если все строки (с индексами от 0 до 4) имеют один и тот же класс/группу, тогда вы должны применить 93 ко всем строкам в выборке (все строки, которые находятся в класс).

+0

Да, я понимаю разницу между классификацией и регрессией. У меня нет проблем с его применением в наборе данных, но в этом случае у меня есть проблема с самим набором данных. Я редактировал сообщение. Спасибо вам за объяснение. Я ценю это :). – ashcrok

+0

См. Второе изменение выше. Надеюсь, это ответит на ваш вопрос. – blacksite

Смежные вопросы