Pull to refresh
4K+
33
Игорь Хмельков@khmelkoff

Data Scientist

5
Rating
27
Subscribers
Send message
Поясните пожалуйста, что вас интересует. Использование user info из телефона? Вот:
Один из исследователей предыдущей версии браслета в своем блоге написал, что не все сервисы могут быть доступны анонимному устройству. Насколько я смог разобраться, в ряде случаев устройство, взаимодействующее с браслетом, должно передать в браслет корректную информацию о пользователе, которая частично хешируется при спаривании со смартфоном.


Еще вот:
Соединение в интерактивном режиме без спаривания обычно длится секунд 20. Это так называемый низкий уровень секретности
Браслет с малиной работает без спаривания, это security=low в gatttool по умолчанию.

Практически вся информация с браслета доступна любому анонимному устройству, кроме измерения пульса, для этого нужно представиться телефоном и отправить на браслет данные пользователя.
Да, работа с малиной не портит профиль браслета в телефоне, так как используется user info телефона. Собственно, браслет «думает», что малина — это телефон. Ретранслятор? Я не подобрал правильного термина — задача малины принять данные от браслета и передать в облако.
Разобрать MIBand не думал, на форумах пишут, что производитель её всё больше обфусцирует с каждой новой версией. Смысл, если все потом передается в открытом виде? Да, есть еще очень много интересного, чего не попробовал, PyGATT, например, или вот ребята пишут мибанду (https://bitbucket.org/OscarAcena/mibanda) — библиотеку для доступа к браслету из Python. NodeJS — очень интересно, обязательно посмотрю, спасибо.
Спасибо, не знал что такой путь есть. С WireShark-ом у меня не очень, пробовал мой лог из Packet Sniffer конвертировать в pcap и смотреть в WireShark-е. Показалось очень сложно. У Packet Sniffer очень простой интерфейс. И неудобный, фильтры работаю почему-то не всегда, приходится просматривать от начала до конца. Но всё очень наглядно.
Да, спасибо. Уже написал update.
Спасибо, Вы правы. Нашел, написал update.
Да, счастья бы не помешало.

Вот так модель считывает слова из файла:
void ReadWord(char *word, FILE *fin) {
  int a = 0, ch;
  while (!feof(fin)) {
    ch = fgetc(fin);
    if (ch == 13) continue;
    if ((ch == ' ') || (ch == '\t') || (ch == '\n')) {
      if (a > 0) {
        if (ch == '\n') ungetc(ch, fin);
        break;
      }
      if (ch == '\n') {
        strcpy(word, (char *)"</s>");
        return;
      } else continue;
    }
    word[a] = ch;
    a++;
    if (a >= MAX_STRING - 1) a--;   // Truncate too long words
  }
  word[a] = 0;
}

Из кода видно, что EOL может и не быть в файле, а значит моя фраза абсолютно корректна.
Теперь, что будет, если EOL в файле есть.
Он заменяется на специальное слово:
</s>
Это слово не участвует в расчете частоты, поэтому не выбрасывается из словаря и всегда находится в его начале. Если EOL в тексте несколько, меняется распределение слов, находящихся рядом с EOL. Вот расчет дистанции, если EOL только один:
Word: </s>  Position in vocabulary: 0
          Word   CosDist
1       factor 0.3524520
2  frightening 0.3380254
3        admit 0.3336470
4        scary 0.3289483
5     scariest 0.3148671
6         prom 0.3142520
7         time 0.3083785
8   paranormal 0.3076151
9       cheesy 0.3073355
10   impressed 0.3042146

А вот, если три (текст тот же самый, просто я добавил три EOL):
Word: </s>  Position in vocabulary: 0
1       yelling 0.3524468
2       toddler 0.3464943
3       janitor 0.3398002
4       running 0.3376773
5         drunk 0.3368221
6         bunch 0.3361016
7            iq 0.3348956
8  pathetically 0.3328072
9  unbelievably 0.3261482
10     retarded 0.3218134

А теперь попробуйте из этого что-то понять про абзацы внутри текста.
Удачи!
Извините, не нарочно ответил ниже.

Я попробовал сейчас на скорую руку просто ввести два абзаца в строку обучающей выборки, ничего заметно не изменилось. Пространство слов из word2vec — это матрица, первый столбец — слова из словаря, начиная со второго по последний — значения компонент вектора. Есть вероятность, что эти значения меняются для слов, которые находятся между переводом строки, но это сложно увидеть. Если получу подтверждение, напишу update.
С сайта gensim: The training algorithms were originally ported from the C package code.google.com/p/word2vec and extended with additional functionality.

Единственное, чего не понял, почему они не используют оригинальную кластеризацию из word2vec и предлагают взять K-Means из scikit-learn вот в этом примере.
Да, спасибо. Пробовал и так, не нашел на что это влияет. В примере от разработчиков одна большая строка на 80 мегабайт: mattmahoney.net/dc/text8.zip
Сделал PCA, см. update в статье. 102 компоненты при пороге в 0.95. Форест на 5% ниже, SVM на один с небольшим.
Я считаю, что ребята старались не зря выдумывая переменные. И, скажем, мне не понятно, как связаны между собой мат.ожидание уровня сигнала и угол между векторами. Я попробую на этой неделе сделать PCA, о результатах напишу.
Да, есть отличия. Но тенденция общая, на 50-60 «важных» признаках точность быстро растет, а потом выходит на плато. Но эти 50-60 признаков дают в районе 0.8. Я раньше всегда отбирал признаки через information gain, обычно получалось. Это ничем не хуже чем считать корреляцию. Тут igr падает от максимума до нуля практически равномерно по всему набору.
Спасибо, как раз думаю над этим.
Нет, не пробовал. Интересовал только отбор переменных. Зато пробовал RFE, о чем в статье писать не стал. Неудачный опыт. 10 часов на трех ядрах, 60 отобранных признаков и точность в районе 0.8 на тестовой выборке, что на 10% хуже полного набора. Да, PCA встроен прямо в caret, вызывается через функцию preProcess.
Интересно, нужно будет попробовать.
При k-fold=5, ntree=100 и 3-х вариантах mtry получается 5 * 3 + 1 модель со 100 деревьями. 1 дерево на моем компьютере при 25000 наблюдениях и 5000 переменных строится в среднем 3 — 10 минут (зависит от mtry).
В итоге 16 * 100 * (3-10) мин.
Спасибо, очень интересно!
Спасибо. Исправил.

Information

Rating
1,250-th
Location
Москва, Москва и Московская обл., Россия
Registered
Activity