Что такое сложность времени поиска / прогнозирования логистической регрессии?

Мы можем объединить / объединить все данные внутри одной коллекции с простой функцией в нескольких строках с помощью клиентской консоли mongodb, и теперь мы сможем выполнить требуемый запрос. Ниже полный пример:

.- Авторы:

db.authors.insert([
    {
        _id: 'a1',
        name: { first: 'orlando', last: 'becerra' },
        age: 27
    },
    {
        _id: 'a2',
        name: { first: 'mayra', last: 'sanchez' },
        age: 21
    }
]);

.- Категории:

db.categories.insert([
    {
        _id: 'c1',
        name: 'sci-fi'
    },
    {
        _id: 'c2',
        name: 'romance'
    }
]);

.- Книги

db.books.insert([
    {
        _id: 'b1',
        name: 'Groovy Book',
        category: 'c1',
        authors: ['a1']
    },
    {
        _id: 'b2',
        name: 'Java Book',
        category: 'c2',
        authors: ['a1','a2']
    },
]);

.- Книжное кредитование

db.lendings.insert([
    {
        _id: 'l1',
        book: 'b1',
        date: new Date('01/01/11'),
        lendingBy: 'jose'
    },
    {
        _id: 'l2',
        book: 'b1',
        date: new Date('02/02/12'),
        lendingBy: 'maria'
    }
]);

.- Магия:

db.books.find().forEach(
    function (newBook) {
        newBook.category = db.categories.findOne( { "_id": newBook.category } );
        newBook.lendings = db.lendings.find( { "book": newBook._id  } ).toArray();
        newBook.authors = db.authors.find( { "_id": { $in: newBook.authors }  } ).toArray();
        db.booksReloaded.insert(newBook);
    }
);

.- Получить новые данные коллекции:

db.booksReloaded.find().pretty()

.- Ответ:)

{
    "_id" : "b1",
    "name" : "Groovy Book",
    "category" : {
        "_id" : "c1",
        "name" : "sci-fi"
    },
    "authors" : [
        {
            "_id" : "a1",
            "name" : {
                "first" : "orlando",
                "last" : "becerra"
            },
            "age" : 27
        }
    ],
    "lendings" : [
        {
            "_id" : "l1",
            "book" : "b1",
            "date" : ISODate("2011-01-01T00:00:00Z"),
            "lendingBy" : "jose"
        },
        {
            "_id" : "l2",
            "book" : "b1",
            "date" : ISODate("2012-02-02T00:00:00Z"),
            "lendingBy" : "maria"
        }
    ]
}
{
    "_id" : "b2",
    "name" : "Java Book",
    "category" : {
        "_id" : "c2",
        "name" : "romance"
    },
    "authors" : [
        {
            "_id" : "a1",
            "name" : {
                "first" : "orlando",
                "last" : "becerra"
            },
            "age" : 27
        },
        {
            "_id" : "a2",
            "name" : {
                "first" : "mayra",
                "last" : "sanchez"
            },
            "age" : 21
        }
    ],
    "lendings" : [ ]
}

Надеюсь, эти строки помогут вам.

1
задан Ana Smile 17 January 2019 в 15:24
поделиться

1 ответ

Сложность обучения для методов логистической регрессии с градиентной оптимизацией: O ((f + 1) csE), где:

  • f - количество признаков (+1 из-за предвзятости). Умножение каждого признака на его вес (f операций, +1 для смещения). Еще f + 1 операций для суммирования всех их (получения прогноза). Используя градиентный метод для улучшения весов, рассчитывается для одного и того же количества операций, поэтому в итоге мы получаем 4 * (f + 1) (два для прямого прохода, два для обратного), что просто O (F + 1) .
  • c - количество классов (возможных выходов) в вашей логистической регрессии. Для двоичной классификации это единица, поэтому этот термин исключается. Каждый класс имеет соответствующий набор весов.
  • с - количество выборок в вашем наборе данных, я думаю, этот довольно интуитивно понятен.
  • E - количество эпох, которые вы хотите выполнить градиентным спуском (целые проходы через набор данных)

Примечание: эта сложность может изменяться в зависимости от на такие вещи, как регуляризация (еще одна операция c), но идея, стоящая за этим, выглядит следующим образом.

Сложность прогнозов для одной выборки: O ((f + 1) c)

  • f + 1 - вы просто умножаете каждый вес на значение функции, добавляете в конечном итоге сложить все это вместе.
  • c - вы делаете это для каждого класса, 1 для двоичных предсказаний.

Сложность прогнозов для многих выборок: O ((f + 1) cs)

  • (f + 1) c - см. Сложность для одной выборки [ 1113]
  • с - количество выборок

Разница между логистической и линейной регрессией с точки зрения сложности: функция активации.

Для мультиклассовой логистической регрессии это будет softmax , в то время как линейная регрессия, как следует из названия, имеет линейную активацию (фактически без активации). Это не меняет сложность, используя большие обозначения O, но это еще одна операция c * f во время обучения (не хотелось загромождать картинку дальше), умноженная на 2 для backprop.

0
ответ дан Szymon Maszke 17 January 2019 в 15:24
поделиться
Другие вопросы по тегам:

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