2015-02-24 5 views
0

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

Итак, у меня есть 2D-список, каждая строка представляет случай и каждый столбец, представляющий функцию (для машинного обучения). Кроме того, у меня есть отдельный список (столбец) в качестве меток.

Я хочу случайным образом выбирать строки из 2D-списка для обучения классификатора при использовании остальных для проверки точности. Таким образом, я хочу знать все индексы строк, которые я использовал для обучения, чтобы избежать повторений.

Я думаю, что есть 2 части вопроса: 1) как случайный образом выбрать 2) как получить индексы

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

Извините, что я до сих пор новичок в сообществе, поэтому, возможно, я сделал ошибку формата. Если у вас есть какие-либо предложения, пожалуйста, дайте мне знать.

Вот часть кода, я использую, чтобы получить 2D-лист

#273 = number of cases 
feature_list=[[0]*len(mega_list)]*273 
#create counters to use for index later 
link_count=0 
feature_count=0 
#print len(mega_list) 
for link in url_list[:-1]: 

    #setup the url 
    samp_url='http://www.mtsamples.com'+link 
    samp_url = "%20".join(samp_url.split()) 

    #soup it for keywords 
    samp_soup=BeautifulSoup(urllib2.urlopen(samp_url).read()) 
    keywords=samp_soup.find('meta')['content'] 
    keywords=keywords.split(',') 

    for keys in keywords: 
     #print 'megalist: '+ str(mega_list.index(keys)) 
     if keys in mega_list: 
      feature_list[link_count][mega_list.index(keys)]=1 

mega_list: список всех ключевых слов

feature_list: список 2D, с любым словом в mega_list, что конкретного ячейка установлена ​​в 1, в противном случае 0

ответ

1

Я бы хранить данные в кадре панды данных вместо 2D списка. Если я правильно понимаю ваши данные правильно, вы могли бы сделать это так:

import pandas as pd 

df = pd.DataFrame(feature_list, columns = mega_list) 

Я не вижу никакого упоминания о зависимой переменной, но я предполагаю, что у вас есть один, потому что вы упомянули алгоритм классификаторов. Если ваша зависимая переменная называется «Y» и находится в формате списка с индексами, которые соответствуют вашим функциям, то этот код будет работать на вас:

from sklearn import cross_validation 

x_train, x_test, y_train, y_test = cross_validation.train_test_split(
    df, Y, test_size=0.8, random_state=0) 
+0

эй! Да, у меня есть зависимая переменная, просто не упомянутая в коде, который я предоставил. Я думаю, что я дам этому алго попробовать! Отчитается назад ха-ха. Благодаря! – JChao

+0

Хорошо, присмотревшись, это может не понадобиться. Я использую Наивный Байес для мульти Номинального приступе, похоже {CLF = MultinomialNB() >>> clf.fit (X, у) MultinomialNB (альфа = 1,0, class_prior = None, fit_prior = True) } выполнит эту работу (это пример с сайта). Я не совсем уверен, хотя, и я чувствую, что этот поток начинает отклоняться от оригинальной темы lol – JChao

1

Как я понимаю, у вас есть список, и вы хотите отбирать список и сохранять индексы для будущего использования. См.: https://docs.python.org/2/library/random.html

Вы можете сделать случайный выбор (xrange (sizeoflist), sizeofsample), который вернет индексы вашего образца. Затем вы можете использовать этот образец для обучения и пропустить их (или получить фантазию и сделать разницу в настройках) для проверки.

Надеется, что это помогает

+0

спасибо, это решает проблему. Хотя теперь больше проблем на поверхности ..... ДРУГАЯ НИТЬ! – JChao