Nano Hash - криптовалюты, майнинг, программирование

Проблемы при извлечении правил ассоциации с Orange?

У меня есть набор данных с размерами (878049, 6).

Это выглядит так:

введите здесь описание изображения

Я хотел бы извлечь правила ассоциации, которые связывают столбец категории с другими столбцами. Таким образом, из документации я попробовал следующее с Orange-Associate:

In:

import Orange
data = Orange.data.Table("data.csv")

In:

data.domain.attributes

Out:

   (DiscreteVariable('Category', values=['ARSON', 'ASSAULT', 'BAD CHECKS', 'BRIBERY', 'BURGLARY', ...]),
 DiscreteVariable('Descript', values=['ABANDONMENT OF CHILD', 'ABORTION', 'ACCESS CARD INFORMATION, PUBLICATION OF', 'ACCESS CARD INFORMATION, THEFT OF', 'ACCIDENTAL BURNS', ...]),
 DiscreteVariable('DayOfWeek', values=['Friday', 'Monday', 'Saturday', 'Sunday', 'Thursday', ...]),
 DiscreteVariable('PdDistrict', values=['BAYVIEW', 'CENTRAL', 'INGLESIDE', 'MISSION', 'NORTHERN', ...]),
 DiscreteVariable('Resolution', values=['ARREST, BOOKED', 'ARREST, CITED', 'CLEARED-CONTACT JUVENILE FOR MORE INFO', 'COMPLAINANT REFUSES TO PROSECUTE', 'DISTRICT ATTORNEY REFUSES TO PROSECUTE', ...]))

In:

from orangecontrib.associate.fpgrowth import *  

X, mapping = OneHot.encode(data, include_class=True)

X

Out:
array([[False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       ..., 
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False]], dtype=bool)

In:

 sorted(mapping.items())

Out:

[(0, (0, 0)),
 (1, (0, 1)),
 (2, (0, 2)),
 (3, (0, 3)),
 (4, (0, 4)),
 (5, (0, 5)),
 (6, (0, 6)),
 (7, (0, 7)),
....
 (950, (4, 15)),
 (951, (4, 16))]

Затем:

In:

itemsets = dict(frequent_itemsets(X, .4))

len(itemsets)

Out:

1 

In:

 class_items = {item

                for item, var, _ in OneHot.decode(mapping, data, mapping)

                if var is data.domain.class_var}
In:
sorted(class_items)

Out:

[]

Я считаю, что проблема в том, что я неправильно дал Оранжевая таблица. Таким образом, как мне загрузить набор данных с помощью оранжевого цвета, чтобы сгенерировать правила ассоциации?

обновить

@K3---rnc answer Я пробовал это:

itemsets = dict(frequent_itemsets(X, .1))

print (len(itemsets))

print( itemsets)

for itemset, _support in itemsets:

    print(' '.join('{}={}'.format(var.name, val)

                   for _, var, val in OneHot.decode(itemset, data, mapping)))

18
{frozenset({935}): 206403, frozenset({20}): 92304, frozenset({928}): 119908, frozenset({924}): 129211, frozenset({946}): 526790, frozenset({921}): 116707, frozenset({946, 932}): 93924, frozenset({919}): 121584, frozenset({932}): 157182, frozenset({21}): 126182, frozenset({922}): 125038, frozenset({16}): 174900, frozenset({929}): 105296, frozenset({918}): 133734, frozenset({16, 946}): 156586, frozenset({925}): 89431, frozenset({923}): 124965, frozenset({920}): 126810}

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-83-83a24c082126> in <module>()
      2 print (len(itemsets))
      3 print( itemsets)
----> 4 for itemset, _support in itemsets:
      5     print(' '.join('{}={}'.format(var.name, val)
      6                    for _, var, val in OneHot.decode(itemset, data, mapping)))

ValueError: not enough values to unpack (expected 2, got 1)

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


Ответы:


1

Вы пытаетесь ввести правила классификации без какой-либо переменной класса в вашей предметной области. Если вы напечатаете data.domain, вы увидите, что у вас есть только обычные атрибуты и метаданные.

[Category, DayOfWeek, PdDistrict, Resolution] {Descript, Address}

Чтобы решить эту проблему, вам нужно установить один из ваших атрибутов в качестве переменной класса.

new_domain = Orange.data.Domain(list(data.domain.attributes[1:]), 
             data.domain.attributes[0], 
             metas=data.domain.metas)

Это установит атрибут «Категория» в качестве переменной класса. Конечно, вы можете установить свою собственную переменную класса в приведенном выше примере. Если вы сейчас напечатаете new_domain, вы должны увидеть что-то вроде этого:

[DayOfWeek, PdDistrict, Resolution | Category] {Descript, Address}
05.07.2016
  • Вы не передаете никаких данных в новую таблицу, только домен. Вместо этого вы должны сделать: Table = Orange.data.Table(new_domain, data) 06.07.2016
  • Еще раз спасибо за помощь. Это на самом деле было полезно. Тем не менее, в настоящее время я извлек только одно правило ассоциации: Resolution=NONE --> Category=LARCENY/THEFT (supp: 156586, conf: 0.2972455817308605). Любая идея, почему это происходит? 08.07.2016

  • 2

    Вы можете увидеть, что содержат ваши найденные наборы предметов:

    # Minimum 20% support. Decrease for more results
    itemsets = dict(frequent_itemsets(X, .2))
    
    for itemset, _support in itemsets.items():
        print(' '.join('{}={}'.format(var.name, val)
                       for _, var, val in OneHot.decode(itemset, data, mapping)))
    

    Будет печатать:

    Category=ASSAULT DayOfWeek=Friday ...
    

    или любой другой набор предметов с поддержкой 40%.

    06.07.2016
  • Спасибо за вашу поддержку, не могли бы вы привести более подробный пример?... до сих пор я пробовал ваш подход, но он не печатает никаких правил ассоциации! 06.07.2016
  • Странный. Если вы напечатаете (itemssets), вы что-нибудь увидите? Это было бы странно. См. пересмотренный пример выше. 06.07.2016
  • Когда я print(itemsts) получаю: {frozenset({946}): 526790}. Есть идеи, что я делаю неправильно? Спасибо за помощь! 06.07.2016
  • Вы получаете только один частый набор элементов, который содержит один элемент и имеет поддержку около 500 тыс. Снижайте минимальное требование поддержки (например, до 10%, 5%, 1% и ниже), пока не получите то, что вам нравится. 800к это много записей. Если вы укажете минимальную поддержку как 0.1, вы получите все наборы элементов, которые содержатся как минимум в ~8k записях. Несмотря на это, вы должны иметь возможность печатать значения определенных элементов с помощью приведенного выше кода. 07.07.2016
  • Я также получаю: ValueError: not enough values to unpack (expected 2, got 1), когда пытаюсь визуализировать правила ассоциации. Спасибо за помощь. 07.07.2016
  • Действительно, извините. Итерация по словарям выполняется только по их ключам. Если нам также нужно получить доступ к поддержке, мы должны перебрать items() словаря. См. обновленный ответ выше. 07.07.2016
  • Я получил: IndexError: list index out of range с последним обновлением. Спасибо! 07.07.2016
  • Интересно. Это похоже либо на ошибку, либо на проблему PEBKAC. В первом случае вы можете отправить им отчет об ошибке по адресу: github.com/biolab/ Orange3-ассоциировать/вопросы 08.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..