2016-02-16 4 views
2

Я пытаюсь понять, как использовать scikit для контролируемого машинного обучения, поэтому я составил некоторые данные, принадлежащие двум различным наборам: set A и set B. У меня есть 18 элементов в наборе A и 18 элементов в множестве B. Каждый из элементов имеет три переменные. Смотрите ниже:Python Изучаемая машинная подготовка

#SetA 
Variable1A = [ 3,4,4,5,4,5,5,6,7,7,5,4,5,6,4,9,3,4] 
Variable2A = [ 5,4,4,3,4,5,4,5,4,3,4,5,3,4,3,4,4,3] 
Variable3A = [ 7,8,4,5,6,7,3,3,3,4,4,9,7,6,8,6,7,8] 


#SetB 
Variable1B = [ 7,8,11,12,7,9,8,7,8,11,15,9,7,6,9,9,7,11] 
Variable2B = [ 1,2,3,3,4,2,4,1,0,1,2,1,3,4,3,1,2,3] 
Variable3B = [ 12,18,14,15,16,17,13,13,13,14,14,19,17,16,18,16,17,18] 

Как бы использовать scikit использовать контролируемое машинное обучение, так что, когда я ввожу новый Seta и SETB данные можно попытаться определить, какие из новых данных принадлежит либо или SETB множеству А.

Извинения за наборы данных небольшие и «составлены». Я просто хочу применить тот же метод, используя scikit для других наборов данных.

+0

Я считаю, что 'sklearn' работает с' numpy', поэтому вам, вероятно, следует начать с этого. В противном случае вы просмотрели любой из [примеров] (http://scikit-learn.org/stable/auto_examples/neighbors/plot_classification.html)? – TheSchwa

+0

@ TheSchwa Это неконтролируемое машинное обучение. Мне требуется контролируемое машинное обучение –

+0

Вы неверны. Это контролируется. Вы не можете использовать алгоритм KNN, не давая ему метки. Unsupervised будет чем-то вроде кластеризации (например, K Means). Большинство общих алгоритмов (KNN, SVM, Naive Bayes) контролируются. – TheSchwa

ответ

1

Ваш вопрос довольно широк, так что это всего лишь краткая схема. Вместо того, чтобы форматировать ваши данные таким образом, вы хотите объединить два набора в один список/массив, а другой столбец будет представлять, к какому набору принадлежит каждая строка. Нечто подобное:

data = [ 
    [3, 5, 7, 0] 
    [4, 4, 8, 0], # these rows have 0 as the last element to represent group A 
    ... 
    [7, 1, 12, 1], 
    [8, 2, 18, 1], # these have 1 as the last element to represent group A 
    ... 
] 

В качестве альтернативы можно поместить только первые три столбца в data и назвать его X, а затем иметь отдельный массив, содержащий только y[0, 0, 0, ..., 1, 1, 1, ...] (указывающее, членство в группе каждой строки). То, что вы хотите избежать, состоит в том, что информация о том, какая группа является точкой, хранится в имя переменных; вместо этого вы хотите иметь информацию «набор A или набор B», хранящуюся в значений переменных (как здесь хранится в значениях в последнем столбце data, или в y),

Все, что вы делаете, вы почти наверняка захотите использовать массивы numpy или структуры данных pandas для хранения ваших данных, а не списков.

Существует множество руководств и примеров, доступных для использования scikit-learn, а также выборки наборов данных, которые могут быть более полезными, чем тот, который вы создали. «Контролируемое машинное обучение» - это широкий термин, включающий множество разных подходов к решению вопроса о том, в какой группе находится точка данных, поэтому вам придется поиграть и попробовать различные алгоритмы классификации. Вся эта информация может быть найдена при помощи поиска в googling и/или просмотра документации scikit.

0

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

import numpy as np # numpy will help us to concatenate the columns into a 2-dimensional array 
# so instead of hiving 3 separate arrays, we have 1 array with 3 columns and 18 rows 

Variable1A = [ 3,4,4,5,4,5,5,6,7,7,5,4,5,6,4,9,3,4] 
Variable2A = [ 5,4,4,3,4,5,4,5,4,3,4,5,3,4,3,4,4,3] 
Variable3A = [ 7,8,4,5,6,7,3,3,3,4,4,9,7,6,8,6,7,8] 

#our target variable for A 

target_variable_A=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 

Variable1B = [ 7,8,11,12,7,9,8,7,8,11,15,9,7,6,9,9,7,11] 
Variable2B = [ 1,2,3,3,4,2,4,1,0,1,2,1,3,4,3,1,2,3] 
Variable3B = [ 12,18,14,15,16,17,13,13,13,14,14,19,17,16,18,16,17,18] 

# target variable for B 
target_variable_B=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 

#lets create a dataset C with only 4 rows that we need to predict if belongs to "1" which is data set A or "0" which is dataset B 

Variable1C = [ 7,4,4,12] 
Variable2C = [ 1,4,4,3] 
Variable3C = [ 12,8,4,15] 

#make the objects 2-dimenionsal arrays (so 1 array with X rows and 3 columns-variables) 
Dataset_A=np.column_stack((Variable1A,Variable2A,Variable3A)) 
Dataset_B=np.column_stack((Variable1B,Variable2B,Variable3B)) 
Dataset_C=np.column_stack((Variable1C,Variable2C,Variable3C)) 

print(" dataset A rows ", Dataset_A.shape[0]," dataset A columns ", Dataset_A.shape[1]) 
print(" dataset B rows ", Dataset_B.shape[0]," dataset B columns ", Dataset_B.shape[1]) 
print(" dataset C rows ", Dataset_C.shape[0]," dataset C columns ", Dataset_C.shape[1]) 

##########Prints ########## 
#(' dataset A rows ', 18L, ' dataset A columns ', 3L) 
#(' dataset B rows ', 18L, ' dataset B columns ', 3L) 
#(' dataset C rows ', 4L, ' dataset C columns ', 3L) 

# since now we have an identification that tells us if it belongs to A or B (e.g. 1 or 0) we can append the new sets together 
Dataset_AB=np.concatenate((Dataset_A,Dataset_B),axis=0) # this creates a set with 36 rows and 3 columns 
target_variable_AB=np.concatenate((target_variable_A,target_variable_B),axis=0) 

print(" dataset AB rows ", Dataset_AB.shape[0]," dataset Ab columns ", Dataset_AB.shape[1]) 
print(" target Variable rows ", target_variable_AB.shape[0]) 

##########Prints ########## 
#(' dataset AB rows ', 36L, ' dataset Ab columns ', 3L) 
#(' target Variable rows ', 36L) 

#now we will select the most common supervised scikit model - Logistic Regression 
from sklearn.linear_model import LogisticRegression 
model=LogisticRegression() # we create an instance of the model 

model.fit(Dataset_AB,target_variable_AB) # the model learns to distinguish between A and B (1 or 0) 

#now we make predictions for the new dataset C 

predictions_for_C=model.predict(Dataset_C) 
print(predictions_for_C) 
# this will print 
#[0 1 1 0] 
# so first case belongs to set A , second to B, third to B and fourth to A 
Смежные вопросы