Экспертная система. Кто ты в душе?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by presidentua, 17 Jan 2008.

  1. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Маленькое вступление
    Недавно пересматривал свои старые программы, и среди завалом нашел малую экспертную систему. Начал разбираться и вспоминать, и оказалось что когда-то в институте давали на лабораторку сделать экспертную систему на основе формул Байеса. Полез потом в Гугл, что немного вспомнить теорию, и оказалось что в Инете так много хлама и с моими мини-мозгами мне это не понять. Поэтому пошел другим путем, а именно стал разбираться что же я здесь когда то накодил. Результат этой роботы перед Вами. Если кому не интересно как работает эта система, то можете просто скачать http://dump.ru/files/n/n560107612/ эту прогу плюс исходники на Делфи. Программа задаст Вам несколько вопросо и определит с какой вероятностью Вы милиционер, програмист и дворник. Не стоит воспринимать ее всерьез. Это всего лишь демонстрация. И кстати Кез и Зако пожалуйста не нада ее критиковать, я даже не пытался ее оптимизировать :)

    Составление база знаний. Что мы хотим узнать?
    Будем узнавать какая машина подходит человеку.
    Пускай у нас человеку может нравиться такое:
    1. мерседес
    2. ваз

    Теперь придумаем вопросы, которые будем спрашивать:
    1. Ты патриот?
    2. Ты богат?
    3. Ты любишь скорость?

    Теперь составим уже базу с вероятностями.
    Как это делаем? Берем первый вопрос. Проводи исследования, и оказывается 6 из 10 владельцев мерса сказали, что патриоты, а 9 из 10 владельцев Ваз сказали, что они патриоты.
    Тоесть получаем такое:
    В(патриот,мерседес) = 0,60 (тоесть 60 %)
    НВ(патриот,мерседес) = 0,40 (тоесть 40 %, получили из 10 отняли 6)
    В(патриот,ваз) = 0,90
    НВ(патриот,ваз) = 0,10

    Как это понимать?
    А так, к примеру:
    В(патриот,ваз) = 0,90 - вероятность того, что водитель ваза скажет что он патриот составляет 90 %
    НВ(патриот,ваз)=0,10 – вероятность того, что видитель ваза скажет что он патриот составляет 10 %

    Такую же базу составляем для 2 и 3 вопроса.
    В(багат,мерседес) = 0,80
    НВ(багат,мерседес) = 0,20
    В(багат,ваз) = 0,50
    НВ(багат,ваз) = 0,50
    В(скорость,мерседес) = 0,90
    НВ(скорость,мерседес) = 0,10
    В(скорость,ваз) = 0,20
    НВ(скорость,ваз) = 0,80

    Начальное значение вероятности
    Перед тем как задавать вопросы нам надо указать начальные значения вероятности автомобиля.
    Тоесть провели опрос и оказалось, что из 100 опрошеных у 40 мерседес и у 60 ваз
    Тоесть начальные вероятности будут такие:
    Вер(мерседес) = 0,4
    Вер(ваз) = 0,6

    Теперь можно начинать проводить опрос.
    Можно задавать вопросы в любом порядке.
    Просчитаем для одного вопроса вероятности. Пускай это будет первый вопрос.
    Ты патриот?
    У человека есть 3 варианта вопроса. «Да», «нет» и «не знаю»

    «Не знаю»
    Если человек ответить «Не знаю», то можно про этот вопрос забыть . И начальные вероятности не пересчитывать. То есть как было у нас
    Вер(мерседес) = 0,4
    Вер(ваз) = 0,6
    Так оно и сталось.

    "Да"
    Если человек ответит "да", то начальные вероятности надо пересчитать за такой формулой
    вер =(в*вер)/(в*вер+нв*(1-вер))

    У нашем случае это надо прощитать для мерседеса и ваза, и мы получаем такие формулы,
    тоесть применяем дважды формулу и получаем такое
    вер[мерседес] =( в[патриот,мерседес]* вер[мерседес])/( в[патриот,мерседес]*вер[мерседес] +нв[патриот,мерседес]*(1- вер[мерседес] ))
    и
    вер[ваз] =( в[патриот, ваз]* вер[ваз])/( в[патриот, ваз]*вер[ваз] +нв[патриот, ваз]*(1- вер[ваз] ))

    Значить мы пересчитали вероятности и получили, новые значения
    Вер(мерседес) = 0,3
    Вер(ваз) = 0,7 (считал в уме и приблизительно)

    "Нет"
    Если человек отвечает "нет", то вероятности надо пересчитать за такой формулой
    вер=((1-в)*вер)/((1-в)*вер+(1-нв)*(1-вер))

    если применить эту формулу к нашим обозначениям, то получим такое:
    вер[мерседес] =((1- в[патриот,мерседес])* вер[мерседес] )/((1- в[патриот,мерседес])* вер[мерседес] +(1-нв[патриот,мерседес])*(1- вер[мерседес] ))
    и
    вер[ваз] =((1- в[патриот, ваз])* вер[ваз] )/((1- в[патриот, ваз])* вер[ваз] +(1-нв[патриот, ваз])*(1- вер[ваз] ))

    Значит, после пересчета получилось:
    вер(мерседес) = 0,5
    вер(ваз) = 0,4


    Таким же образом задаем и остальные вопросы. В результате мы получаем новые значения вероятности, пускай такие:
    вер(мерседес) = 0,3
    вер(ваз) = 0,6

    Потом мы ищем максимальное значение, это у нас 0,6. И говорим. Скорей всего чел у тебя ВАЗ
    Вот так-то. И решили мы эту задачу. Кто понял тот гений, а кто не понял тот тоже гений

    ПС. Хочу заметить, что здесь используется упрощенная формула Байеса. И если бы он это увидел, то мне бы не жить :)
    ПСС: Прошу прощения за не научный язык и за некоторые отклонение от общепринятых обозначений и терминов. Хотел чтобы было более понятнее.
    ПССС: спасибо Сергей Владимировичу (моему преподу), что когда-то мне на парах это обьяснял
    ПСССС: если кто думает что это бесполезные знание для хакинга, то он глубоко ошибается :). Мое ИМХО
     
    7 people like this.
  2. Soviet[HZ]

    Soviet[HZ] Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    87
    Likes Received:
    40
    Reputations:
    22
    Не работает теория вероятности.)) У меня каждого из 3 пунктов по 0,03.
     
  3. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Согласен она сложновата. И Экспертные системы тоже сложновато. Но большинству из Вас еще придется это изучать в институтах и может кому-то это понравиться :). Эту систему можна применять в Веб-безопасносит, поэтому я и попытался написать это. Незнаю насколько понятно получилось. Ну надеюсь что более менее. Поверьте это очень сложно обьяснять.

    Кстати, все проходим Тест и определяемся кто же мы
    или Програмисты
    или Дворники
    или Милиционеры

    тест работает на основе вашего подсознания. А может сдесь все в подсознании из милиции :)

    ПС: не сильно ругайте меня за результаты
     
  4. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Если значение одинаковое, то ты можешь быть любыим из вариантов и система не может определить точно.

    А если серьезно, то нам есть файли ТЕСТ в котором задан весь тест. И система работает только отталкиваясь от этого файла. Поэтому теория вероятности всегда работает, а может не работать голова у АВТОРА, что СОСТАВЛЯЛ этот тест, тоесть у меня. И за это простите меня. Тест составлял давно, и тогда у меня не хватило терпения придумать больше вопросов. Такчто не серчайте :)

    ПС: уважаемые Ачатовцы, если есть какие-то вопросы то задавайте их и я с удовольствием отвечу, а меня как всегда подправять более знающие колеги :). Я спать, а завтра ночью - в вашем роспоряжении :)
     
    #4 presidentua, 17 Jan 2008
    Last edited: 17 Jan 2008
  5. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    моё :
    Мент - 0,05
    Програміст - 0,60
    Дворник - 0,01
    : )
     
  6. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    У меня был этот предмет в прошлом симестре. У нас была программа - для нее создавали базу знаний. В архиве - установочник проги и моя база знаний.
    http://ifolder.ru/4984735
     
    1 person likes this.
  7. n3m0

    n3m0 Elder - Старейшина

    Joined:
    11 May 2007
    Messages:
    133
    Likes Received:
    92
    Reputations:
    11
    Президент, она в серьех оперделяет? Она меня спалила)))
     
    1 person likes this.
  8. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Меня тоже. Как видно из моего места роботы в профиле. Я после этого уже и не скрываю своего мета роботы.

    Как говорит наш министр (кажется):
    "Милиция с народом" :)
     
  9. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Мент - 1,00
    Програміст - 0,00
    Дворник - 0,05
    ____________________________________
    Не ожидал
    ЗЫ А за статейко плюс =)
     
    1 person likes this.
  10. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Переведи программу на русский или английский))
     
    2 people like this.
  11. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Специально для _Great_ перевод:

    для перевода замените содержание файла test на следующее содержание:
    PHP:
    Кто ты по професии в душе? ( ВниманиеНа основании подсознательных желаний!!! )
    6
    Любиш ты природу
    ?
    У тебя есть фонарик?
    Ты любишь день (работать днем)?
    Ты радуеш людей (своим поведением)?
    У тебя большая зарплата?
    Ты любиш футбол?
    3
    Милиционер
    Програмист
    Дворник
    1919191911928
    1191919198246
    1191955552855
    _Great_, все равно будет больше вероятность, что ты милиционер :)

    Так что, "Здраствуй колега" :)
     
  12. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Милиционер - 1,00
    Програмист - 0,00
    Дворник - 0,00

    ыы