Оценка вероятности, учитывая другие вероятности от предшествующего

Если вы не хотите использовать класс, производный от StringWriter, то в вашем случае вы можете просто установить OmitXmlDeclaration в false и объявить свой собственный, как я делаю ниже:

 public static string Serialize<T>(this T value, string xmlDeclaration = "<?xml version=\"1.0\"?>") where T : class, new()
        {
            if (value == null) return string.Empty;

            using (var stringWriter = new StringWriter())
            {
                var settings = new XmlWriterSettings
                {
                    Indent = true,
                    OmitXmlDeclaration = xmlDeclaration != null,
                };

                using (var xmlWriter = XmlWriter.Create(stringWriter, settings))
                {
                    var xmlSerializer = new XmlSerializer(typeof(T));

                    xmlSerializer.Serialize(xmlWriter, value);

                    var sb = new StringBuilder($"{Environment.NewLine}{stringWriter}");

                    sb.Insert(0, xmlDeclaration);

                    return sb.ToString();
                }
            }
5
задан sanity 9 June 2009 в 01:08
поделиться

4 ответа

Вот байесовское вычисление и один пример / тест:

def estimateProbability(priorProbs, buyCount, noBuyCount):
  # first, estimate the prob that the actual buy/nobuy counts would be observed
  # given each of the priors (times a constant that's the same in each case and
  # not worth the effort of computing;-)`
  condProbs = [p**buyCount * (1.0-p)**noBuyCount for p in priorProbs]
  # the normalization factor for the above-mentioned neglected constant
  # can most easily be computed just once
  normalize = 1.0 / sum(condProbs)
  # so here's the probability for each of the prior (starting from a uniform
  # metaprior)
  priorMeta = [normalize * cp for cp in condProbs]
  # so the result is the sum of prior probs weighed by prior metaprobs
  return sum(pm * pp for pm, pp in zip(priorMeta, priorProbs))

def example(numProspects=4):
  # the a priori prob of buying was either 0.3 or 0.7, how does it change
  # depending on how 4 prospects bought or didn't?
  for bought in range(0, numProspects+1):
    result = estimateProbability([0.3, 0.7], bought, numProspects-bought)
    print 'b=%d, p=%.2f' % (bought, result)

example()

вывод:

b=0, p=0.31
b=1, p=0.36
b=2, p=0.50
b=3, p=0.64
b=4, p=0.69

, что согласуется с моими ручными вычислениями для этого простого случая. Обратите внимание, что вероятность покупки, по определению, всегда будет между наименьшей и наибольшей среди набора априорных вероятностей; Если это не то, что вы хотите, вы можете ввести небольшую выдумку, представив два «псевдопродукта»: один, который никто никогда не купит (p = 0,0), и тот, который всегда будет покупать (p = 1,0) - это дает большее значение имеют фактические наблюдения, какими бы редкими они ни были, и меньшее значение для статистики прошлых продуктов. Если мы сделаем это здесь, мы получим:

b=0, p=0.06
b=1, p=0.36
b=2, p=0.50
b=3, p=0.64
b=4, p=0.94

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

2
ответ дан 15 December 2019 в 01:10
поделиться

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

В псевдокоде:

def estimateProbability(priorProbs, buyCount, noBuyCount, faithInPrior=None):
    if faithInPrior is None: faithInPrior = [10 for x in buyCount]
    adjustedBuyCount = [b + p*f for b,p,f in 
                                zip(buyCount, priorProbs, faithInPrior]
    adjustedNoBuyCount = [n + (1-p)*f for n,p,f in 
                                zip(noBuyCount, priorProbs, faithInPrior]
    return [b/(b+n) for b,n in zip(adjustedBuyCount, adjustedNoBuyCount]
2
ответ дан 15 December 2019 в 01:10
поделиться

Похоже, вы пытаетесь сделать Обучение правилам ассоциации . У меня сейчас нет времени предоставить вам какой-либо код, но я укажу вам направление WEKA , который представляет собой фантастический набор инструментов для сбора данных с открытым исходным кодом для Java. Там вы найдете много интересного, что поможет вам решить вашу проблему.

0
ответ дан 15 December 2019 в 01:10
поделиться

На мой взгляд, лучший вы можете использовать равномерный дистрибутив, если у вас нет каких-либо подсказок относительно распределения. Или вы говорите об установлении связи между этими товарами и товарами, ранее купленными одним и тем же человеком в Amazon Fashion «люди, которые покупают этот товар, также покупают ...» ??

0
ответ дан 15 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

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