Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

О «гораздо более опытных» людях. Мне очень сложно судить о Вашем опыте, он на Вас не написан. Могу судить только по Вашим статьям. Из них я понял, что Вы может запихнуть датасет в R и посмотреть на графики, а так же, то, что по Вашему мнению getters и setters нарушают инкапсуляцию. Простите, что я не восхищен, пусть в своей статье и я тоже не сделал ничего сверхвыдающегося.
1. Глубокое непонимание: Ваше определение «отдельного метода», с которым Вы «давно определились». Я под это определение могу щас придумать пару-тройку классификаторов, которые на самом то деле вовсе отдельными методами не будут.
Грубая ошибка: проблема с диаграммами Эйлера-Венна. Если следовать Вашей логике построения диаграмм, то классификация как раз покроет все три кргуа. А еще она пересечется с кластеризацией на ANN.
Глубокое непонимание: Использвание функции ядра выходит за пределы двух этих кругов. Ядра, например, можно и в байесовских классификаторах использовать.
(ок, ядра могут быть использованы и в других классификаторах, но это только вопрос количества понятий — всё равно ядерный классификатор всегда будет польностью находиться внутри другов других классификаторов)
4. Глубокое непонимание: классификация с помощью ядер. Задача: распознавать написанные от руки числа от 0 до 9. Все как обычно: цифры представляют собой картинки черно-белые, признаками будут значения интенсивности для пикселей. Алгоритм простой будет: чтобы классифицировать новую картинку, мы будет относить ее к тому классу, к которому принадлежит наболее схожая(близкая) с ней картинка из обучающей выборки. Для этого зададимся функциями f0,...,f9:
fi:x->R, где х — это вектор признаков (вектор изображения).
Зададимся также метрикой:
|| x — x' || = sqrt[ sigma { фj(x) — фj(x') }^2 ], где j=1..n; ф = (ф1, .., фn) называется feature mapping. Например, это может быть произведением интенсивностей пикселей:
ф = (х1х1, ...,x1xn, x2x1, ...,xnxn). Т.е. можно сказать определяем корреляцию изображений.
Т.о. мы можем представить f следующим образом:
f(x) = sigma(ai) sigma[ фj(xj)фj(x) ] = sigma[ ai k(xi, x)], где i=1..m, j=1..n; m- количество отмапенных объектов из обучающей выборки ф(х1),.., ф(xm); a из R^m; к — ядро, а функция, включающая ядро называется ядерным классификатором (kernel classifier).
5. Глубокое непонимание: «В логистической регресси/перцептронах примерно так же». Соглашусь, что в перцептронах примерное так же. как в SVM. Но регрессия она по-вашему как наивный байес или как SVM?
А то я бы тут тоже начал рассказывать, что регрессия примерно тоже, что и наивный байес
а потом бы доказывал это на диаграммах Эйлера-Венна, при этом постоянно меняя свои «показания».
Вы на секунду представьте, что то, что Вы написали тут — рассказываете на какой-нибудь научной конференции.
Но то, что говорите Вы, как человек «гораздо более опытный»… Но это только мое мнение, у Вас свое ЧСВ, Вы наверняка считаете по-другому. Но то, что говорите Вы, как человек «гораздо более опытный»… Но это только мое мнение, у Вас свое ЧСВ, Вы наверняка считаете по-другому.
2. как я ни старался — он уже давно отошел от изначальной темы
по-моему Вы спорите ради спора, ибо я несколько раз предлагал Вам остановиться (ну и еще потому, что Вы строчите мне простыни-ответы в 2 часа ночи)
в принципе не можете признать свои ошибки
Тот пример классификатора, который Вы только что раскритиковали я взял из книги, которая породила наш спор.
def crossValidationSplits(self, trainDir):
"""Returns a lsit of TrainSplits corresponding to the cross validation splits."""
</code>[INFO] Accuracy: 0.829000
[INFO] Accuracy: 0.827000
def learn(self, genre, words):
if genre not in self.genres:
self.genres[genre] = 0
self.genres[genre] += len(words)
for word in words:
if not word in self.vocabulary:
self.vocabulary[word] = {}
if not genre in self.vocabulary[word]:
self.vocabulary[word][genre] = 1
else:
self.vocabulary[word][genre] += 1
def classify(self, words):
result = {}
for g in self.genres:
result[g] = 0
for word in words:
if word in self.vocabulary:
for genre in self.genres:
if genre in self.vocabulary[word]:
k = (self.vocabulary[word][genre] + 1.0) / (self.genres[genre] + len(self.vocabulary))
result[genre] += math.log(k)
else:
result[genre] += math.log(1.0 / (self.genres[genre] + len(self.vocabulary)))
else:
for genre in self.genres:
result[genre] += math.log(1.0 / (self.genres[genre] + len(self.vocabulary)))
sigma = 0
for g in self.genres:
sigma += self.genres[g]
for g in self.genres:
result[g] += math.log(self.genres[g]/float(sigma))
return result
Yet another classifier