Лучше всего подход к тому, что я думаю, является [закрытой] проблемой машинного обучения

Вы на правильном пути. Вместо «a» вам нужно использовать другой html-тег «td» для строк. Также 'th' для имен столбцов. Вот один из способов его реализации. Функция list_slide преобразует каждые 14 элементов в одну строку, поскольку исходная таблица имеет 14 столбцов.

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

url = "http://www.tjsc.com/Sales/TodaySales"
r = requests.get(url, verify=False)
text = r.text
soup = bs(text, 'lxml')

# Get column headers from the html file
header = []
for c_name in  soup.findAll('th'):
    header.append(c_name)
# clean up the extracted header content
header = [h.contents[0].strip() for h in header]

# get each row of the table
row = []
for link in soup.find_all('td'):
    row.append(link.get_text().strip())

def list_slice(my_list, step):
"""This function takes any list, and divides it to chunks of size of "step"
"""
   return [my_list[x:x + step] for x in range(0, len(my_list), step)]

# creating the final dataframe
df = pd.DataFrame(list_slice(row, 14), columns=header[:14])
9
задан bias 19 July 2009 в 05:15
поделиться

9 ответов

Кажется, что Вы - кандидат на Методы опорных векторов.

Пойдите получают libsvm. Прочитайте "Практическое руководство по классификации SVM", которую они распределяют, и коротко.

В основном Вы собираетесь взять свои события и отформатировать их как:

dv1 1:iv1_1 2:iv1_2 3:iv1_3 4:iv1_4 ...
dv2 1:iv2_1 2:iv2_2 3:iv2_3 4:iv2_4 ...

выполните его через их утилиту svm-масштаба и затем используйте их grid.py сценарий для поиска соответствующих параметров ядра. Алгоритм изучения должен смочь выяснить отличающуюся важность переменных, хотя Вы смогли взвешивать вещи также. Если Вы думаете, что время будет полезно, просто добавит время как другая независимая переменная (функция) учебного алгоритма для использования.

Если бы libsvm не может вполне получить точность, Вы хотели бы, рассмотрели бы подход к SVMlight. Только очень немного тяжелее для контакта с, и намного больше опций.

Распознавание образов епископа и Машинное обучение являются, вероятно, первым учебником, который будет смотреть для получения дополнительной информации о том, что libsvm и SVMlight на самом деле делают с Вашими данными.

8
ответ дан 4 December 2019 в 13:05
поделиться

Если у Вас есть некоторые классифицированные данные - набор демонстрационных проблем, соединенных с их корректными ответами - запускает по образованию некоторые простые алгоритмы как K-Nearest-Neighbor и Perceptron и видящий, выходит ли что-либо значимое из него. Не потрудитесь пытаться решить его оптимально, пока Вы не знаете, можно ли решить его просто или вообще.

Если у Вас нет классифицированных данных или не многого из них, начните исследовать алгоритмы обучения без учителя.

1
ответ дан 4 December 2019 в 13:05
поделиться

Это кажется, что любой вид классификатора должен работать на эту проблему: найдите лучший класс (Ваша зависимая переменная) для экземпляра (Ваши события). Простая начальная точка могла бы быть Наивной Байесовой классификацией.

1
ответ дан 4 December 2019 в 13:05
поделиться

Это - определенно проблема машинного обучения. Weka является отличным выбором, если Вы знаете Java и хотите хороший lib GPL, где все, что необходимо сделать, выбрать классификатор и записать немного связующего звена. R, вероятно, не собирается сокращать его, для которого много экземпляров (события, поскольку Вы назвали его), потому что это довольно медленно. Кроме того, в R все еще необходимо найти или записать, что машинное обучение освобождает, хотя это должно быть легко, учитывая, что это - статистический язык.

Если Вы полагаете, что Ваши функции (независимые переменные) условно независимы (значение, независимы, учитывая зависимую переменную), наивный Bayes является идеальным классификатором, поскольку это является быстрым, поддающимся толкованию, точным и легким реализовать. Однако с 100 000 экземпляров и только 30-50 функциями можно, вероятно, реализовать довольно сложную систему классификации, которая получает большую структуру зависимостей в данных. Ваш лучший выбор, вероятно, был бы методом опорных векторов (SMO в Weka) или случайный лес (Да, это - глупое имя, но он помог случайному лесу завоевать популярность.), Если Вы хотите преимущество легкого interpretability Вашего классификатора даже за счет некоторой точности, возможно, прямое, дерево решений J48 работало бы. Я рекомендовал бы против нейронных сетей, поскольку они являются действительно медленными и обычно не работают немного лучше на практике, чем SVMs и случайный лес.

1
ответ дан 4 December 2019 в 13:05
поделиться

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

1
ответ дан 4 December 2019 в 13:05
поделиться

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

1
ответ дан 4 December 2019 в 13:05
поделиться

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

1
ответ дан 4 December 2019 в 13:05
поделиться

Вы упомянули, что у вас есть 30-50 независимых переменных, и некоторые из них более важны, чем остальные. Итак, предполагая, что у вас есть исторические данные (или то, что мы назвали обучающим набором), вы можете использовать PCA (анализ основных компонентов) или другие методы уменьшения размерности, чтобы уменьшить количество независимых переменных. Этот шаг, конечно, не обязателен. В зависимости от ситуации вы можете получить лучшие результаты, сохранив все переменные, но добавив веса каждой из них в зависимости от их актуальности. Здесь PCA может помочь вам вычислить, насколько «релевантна» переменная.

Вы также упомянули, что события, произошедшие в последнее время, должны быть более важными. В этом случае вы можете присвоить недавнему событию больший вес, а более старому - меньшему. Обратите внимание, что важность события не имеет значения. t должны линейно расти со временем. Это может иметь больше смысла, если он будет расти экспоненциально, поэтому вы можете поиграть с числами здесь. Или, если у вас нет данных для обучения, возможно, вы можете рассмотреть возможность удаления слишком старых данных.

Как сказал Юваль Ф, это больше похоже на проблему регрессии, чем на проблему классификации. Поэтому вы можете попробовать SVR (Support Vector Regression), которая является регрессионной версией SVM (Support Vector Machine).

вы можете попробовать и другие вещи:

  1. Поиграйте с тем, как вы масштабируете диапазон значений вашего независимого переменные. Скажем, обычно [-1 ... 1] или [0 ... 1]. Но вы можете попробовать другие диапазоны, чтобы увидеть, помогут ли они. Иногда да. В большинстве случаев они этого не делают.
  2. Если вы подозреваете, что существует «скрытый» вектор признаков с меньшей размерностью, скажите N << 30 и it ' s нелинейный по своей природе, вам потребуется нелинейное уменьшение размерности. Вы можете прочитать о ядре PCA или, в последнее время, о создании многообразия.
1
ответ дан 4 December 2019 в 13:05
поделиться

То, что вы описали, является классической проблемой классификации. И, на мой взгляд, зачем вообще писать новые алгоритмы, если у вас есть инструмент вроде Weka. На вашем месте я бы просмотрел список алгоритмов контролируемого обучения (я не совсем понимаю, почему люди предлагают сначала неконтролируемое обучение, когда это настолько очевидная проблема классификации), используя 10-кратную (или k-кратную) перекрестную проверку , который используется по умолчанию в Weka, если я помню, и посмотрите, какие результаты вы получите! Я бы попробовал:

-Нейронные сети
-SVM
-Деревья решений (это сработало для меня очень хорошо, когда я решал аналогичную задачу)
-Boosting с помощью деревьев решений / пней
-Что-нибудь еще!

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

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

Изменить: Я думаю, Юваль прав, я не платил внимание к проблеме дискретизации вашего ценового значения для классификации. Однако я не знаю, доступна ли регрессия в Weka, и вы все равно можете довольно легко применить методы классификации к этой проблеме. Вам нужно создать классы ценовых значений, например, ряд диапазонов цен для комиксов, чтобы у вас было дискретное число (например, от 1 до 10), представляющее цену комикса. Тогда вы можете легко выполнить его классификацию.

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

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

1
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: