[phpBB Debug] PHP Notice: in file /viewtopic.php on line 981: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
[phpBB Debug] PHP Notice: in file /viewtopic.php on line 981: getdate(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4183: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4185: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4186: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4187: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
Chaos and Correlation • Просмотр темы - Santander Value Prediction Challenge
Страница 11 из 35

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Вт авг 07, 2018 4:09 pm
Eugene Lutsenko
нужен поиск двух констант. я сразу и говорил, что для всех моделей и инт.критериев, как в Excel-файле..

В файле "Обобщение результатов2.xls", который я послал тебе на почту, показано, как получить стандартизированные результаты распознавания. Из них уже удобно получить такие, которые дадут минимальный RMSLE. Для этого можно посчитать матрицу с разными A, B от минимального до максимального значений в обучающей выборке. В этом же файле получены результаты распознавания с такими же средними и ср.кв.откл. как в обучающей выборке. Но они не оказались очень уж хорошими. Поэтому и возникла мысль получить много таких матриц с разными A,B и найти из них наилучшую по RMSLE. А потом с этими же A,B преобразовать результаты распознавания тестовой выборки. И тогда уже посылать результаты, полученные в наилучшей по этому критерию модели с наилучшим инт.критерием

данные тут: https://www.kaggle.com/c/santander-valu ... lenge/data и еще сейчас пришлю на почту.

В том архиве: c:\Aidos-X\AID_DATA\Inp_data\Inp_data.csv
Я только имя файла поменял

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Вт авг 07, 2018 5:52 pm
Eugene Lutsenko
посмотрим значение критерия, который удастся получить и пошлем результаты распознавания в самой лучшей модели. У меня получалось что-то около 1.763

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 6:37 am
Eugene Lutsenko
Послал тебе на почту правильные и неправильные матрицы моделей и как они выглядят в системе Эйдос. Ниже мои функции работы с этими текстовыми матрицами. Эти функции обеспечивают работу с текстовыми матрицами любой размерности практически как dbf-файлами по номерам записей и полей. Для расчета позиций полей используются файлы структуры, которые я приводил на форуме и привожу здесь. Они разные для Abs.txt, Prc#.txt и Inf#.txt. Кроем того они зависят также от максимальной длины наименования описательной шкалы с градацией в Attributes.dbf. Наверное надо смотреть как применяются эти функции в системе Эйдос в исходном тексте: http://lc.kubagro.ru/__AIDOS-X.txt, Чтобы проверить получилось или нет достаточно посмотреть модели в режиме 5.5.

Для проверки я установил лаб.работу 3.03 в режиме 1.3. Потом выполнил режим 3.5, который выполняет синтез и верификацию моделей. Потом сохранил txt-матрицы моделей в отдельную папку. Посмотрел их в режиме 5.5. Потом выполнил твой модуль синтеза моделей. И сразу посмотрел их в режиме 5.5. Сохранил их в другую папку и послал все тебе и сами txt-матрицы моделей, и скришоты.

Но я думаю сейчас это не срочно. Сейчас надо сделать нормировку результатов распознавания обучающей выборки, выбор модели и инт.критерия с минимальным критерием Каггла и нормировку результатов распознавания тестовой выборки в наилучшей модели с теми же параметрами, чтобы послать в Каггл.
Код: Выделить всё
* ###########################################################################
// Определить максимальную длину наименования: ОПИСАТЕЛЬНАЯ ШКАЛА-градация
mLenNameMax = 33
FOR i=1 TO N_Gos
    SELECT Gr_OpSc;DBGOTO(i)
    M_NameGrOS = ALLTRIM(Name_GrOS)
    M_KodOpSc  = Kod_OpSc
    SELECT Opis_Sc;DBGOTO(M_KodOpSc)
    M_NameOS = UPPER(ALLTRIM(Name_OpSc))
    // Если в названии градации уже включено наим.шкалы, то повторно не включать его
    IF AT(M_NameOS, UPPER(M_NameGrOS)) = 0
       M_Name = M_NameOS+"-"+M_NameGrOS
    ELSE
       M_Name = M_NameGrOS
    ENDIF
    mLenNameMax = MAX(mLenNameMax, LEN(M_Name))
NEXT

********** Структура создаваемой базы ***********

aInfStruct := { { "Kod_pr", "N",         15, 0},;   // 1
                { "Name"  , "C",mLenNameMax, 0} }   // 2
FOR j=1 TO N_Cls
    FieldName = "N"+ALLTRIM(STR(j,15))
    AADD(aInfStruct, { FieldName, "N", 19, 1 })
NEXT
AADD(aInfStruct, { "Summa", "N", 19, 1 })
AADD(aInfStruct, { "Sredn", "N", 19, 7 })
AADD(aInfStruct, { "Disp" , "N", 19, 7 })

DC_ASave(aInfStruct, "_AbsStruct.arx")      // Когда БД создается - записывать структуру, когда открывается - считывать
*aInfStruct = DC_ARestore("_AbsStruct.arx")

*************************************************

DB_name = "Abs.txt"
nHandle := FCreate( DB_name, FC_NORMAL )                   // Создание БД (если она была, то все равно создается пустая)

IF nHandle = -1
   MsgBox(L("Файл: "+DB_name+" не может быть создан. Ошибка: ")+FERROR())
   RETURN NIL
ENDIF

***** Формирование пустой записи
N_Col  = N_Cls+5             // Число полей
CrLf   = CHR(13)+CHR(10)     // Конец строки (записи)
Lc_buf = ""
FOR j=1 TO N_Col
*   S = IF(j=2*INT(j/2),"#","X")        // Для отладки
    S = " "                             // Для работы
    Lc_buf = Lc_buf + REPLICATE(S, aInfStruct[j,3])
NEXT
Lc_buf = Lc_buf + CrLf
Len_LcBuf = LEN(Lc_buf)

LC_DbCreate( DB_name, nHandle, Lc_buf, N_Gos+4 )           // Создание БД.txt, содержащей N_Rec пустых записей ############
*nHandle := FOpen( DB_name, FO_READWRITE )                 // Открытие базы данных ############################################

**** Рассчет массива начальных позиций полей в строке
PRIVATE aPos[N_Col]
aPos[1] = 1
FOR j=2 TO N_Col
    aPos[j] = aPos[j-1] + aInfStruct[j-1,3]
NEXT
* ###########################################################################

Код: Выделить всё
* ###########################################################################
// Определить максимальную длину наименования: ОПИСАТЕЛЬНАЯ ШКАЛА-градация
mLenNameMax = 33
FOR i=1 TO N_Gos
    SELECT Gr_OpSc;DBGOTO(i)
    M_NameGrOS = ALLTRIM(Name_GrOS)
    M_KodOpSc  = Kod_OpSc
    SELECT Opis_Sc;DBGOTO(M_KodOpSc)
    M_NameOS = UPPER(ALLTRIM(Name_OpSc))
    // Если в названии градации уже включено наим.шкалы, то повторно не включать его
    IF AT(M_NameOS, UPPER(M_NameGrOS)) = 0
       M_Name = M_NameOS+"-"+M_NameGrOS
    ELSE
       M_Name = M_NameGrOS
    ENDIF
    mLenNameMax = MAX(mLenNameMax, LEN(M_Name))
NEXT

********** Структура создаваемой базы ***********

aInfStruct := { { "Kod_pr", "N",         15, 0},;   // 1
                { "Name"  , "C",mLenNameMax, 0} }   // 2
FOR j=1 TO N_Cls
    FieldName = "N"+ALLTRIM(STR(j,15))
    AADD(aInfStruct, { FieldName, "N", 19, 7 })
NEXT
AADD(aInfStruct, { "Summa", "N", 19, 7 })
AADD(aInfStruct, { "Sredn", "N", 19, 7 })
AADD(aInfStruct, { "Disp" , "N", 19, 7 })

DC_ASave(aInfStruct, "_InfStruct.arx")      // Когда БД создается - записывать структуру, когда открывается - считывать
*aInfStruct = DC_ARestore("_InfStruct.arx")

*************************************************

***** Формирование пустой записи
N_Col  = N_Cls+5             // Число полей
CrLf   = CHR(13)+CHR(10)     // Конец строки (записи)
Lc_buf = ""
FOR j=1 TO N_Col
*   S = IF(j=2*INT(j/2),"#","X")        // Для отладки
    S = " "                             // Для работы
    Lc_buf = Lc_buf + REPLICATE(S, aInfStruct[j,3])
NEXT
Lc_buf = Lc_buf + CrLf
Len_LcBuf = LEN(Lc_buf)

****** Создаем стат.базы и базы знаний (7 по частным критериям знаний)

Ar_Model := {"Abs","Prc1","Prc2","Inf1","Inf2","Inf3","Inf4","Inf5","Inf6","Inf7" }
PRIVATE nHandle[LEN(Ar_Model)]

FOR z=4 TO LEN(Ar_Model)
    IF aCalcInf[z]                                           // Создавать только заданные БД, т.к. они могут быть очень большого размера
       DB_name = Ar_Model[z]+".txt"
       nHandle[z] := FCreate( DB_name, FC_NORMAL )           // Создание БД (если она была, то все равно создается пустая)
       IF nHandle[z] = -1
          MsgBox("Файл: "+DB_name+" не может быть создан. Ошибка:"+FERROR())
          RETURN NIL
       ENDIF
       LC_DbCreate( DB_name, nHandle[z], Lc_buf, N_Gos+3 )   // Создание БД.txt, содержащей N_Rec пустых записей ############
    ENDIF
NEXT
*nHandle := FOpen( DB_name, FO_READWRITE )                   // Открытие базы данных ########################################

**** Рассчет массива начальных позиций полей в строке
PRIVATE aPos[N_Col]
aPos[1] = 1
FOR j=2 TO N_Col
    aPos[j] = aPos[j-1] + aInfStruct[j-1,3]
NEXT
* ###########################################################################

Код: Выделить всё
* ###########################################################################
// Определить максимальную длину наименования: ОПИСАТЕЛЬНАЯ ШКАЛА-градация
mLenNameMax = 33
FOR i=1 TO N_Gos
    SELECT Gr_OpSc;DBGOTO(i)
    M_NameGrOS = ALLTRIM(Name_GrOS)
    M_KodOpSc  = Kod_OpSc
    SELECT Opis_Sc;DBGOTO(M_KodOpSc)
    M_NameOS = UPPER(ALLTRIM(Name_OpSc))
    // Если в названии градации уже включено наим.шкалы, то повторно не включать его
    IF AT(M_NameOS, UPPER(M_NameGrOS)) = 0
       M_Name = M_NameOS+"-"+M_NameGrOS
    ELSE
       M_Name = M_NameGrOS
    ENDIF
    mLenNameMax = MAX(mLenNameMax, LEN(M_Name))
NEXT

********** Структура создаваемой базы ***********

aInfStruct := { { "Kod_pr", "N",         15, 0},;   // 1
                { "Name"  , "C",mLenNameMax, 0} }   // 2
FOR j=1 TO N_Cls
    FieldName = "N"+ALLTRIM(STR(j,15))
    AADD(aInfStruct, { FieldName, "N", 19, 7 })
NEXT
AADD(aInfStruct, { "UnProb", "N", 19, 7 })          // Безусловная вероятность
AADD(aInfStruct, { "Sredn" , "N", 19, 7 })
AADD(aInfStruct, { "Disp"  , "N", 19, 7 })

DC_ASave(aInfStruct, "_PrcStruct.arx")              // Когда БД создается - записывать структуру, когда открывается - считывать
*aInfStruct = DC_ARestore("_PrcStruct.arx")

*************************************************

***** Формирование пустой записи
N_Col  = N_Cls+5             // Число полей
CrLf   = CHR(13)+CHR(10)     // Конец строки (записи)
Lc_buf = ""
FOR j=1 TO N_Col
*   S = IF(j=2*INT(j/2),"#","X")        // Для отладки
    S = " "                             // Для работы
    Lc_buf = Lc_buf + REPLICATE(S, aInfStruct[j,3])
NEXT
Lc_buf = Lc_buf + CrLf
Len_LcBuf = LEN(Lc_buf)

******** Создать БД *********************
DB_name1 = "Prc1.txt"
nHandle1 := FCreate( DB_name1, FC_NORMAL )                  // Создание БД (если она была, то все равно создается пустая)
IF nHandle1 = -1
   MsgBox(L("Файл: "+DB_name1+" не может быть создан. Ошибка:")+FERROR())
   RETURN NIL
ENDIF
LC_DbCreate( DB_name1, nHandle1, Lc_buf, N_Gos+3 )          // Создание БД.txt, содержащей N_Rec пустых записей ############

DB_name2 = "Prc2.txt"
nHandle2 := FCreate( DB_name2, FC_NORMAL )                  // Создание БД (если она была, то все равно создается пустая)
IF nHandle2 = -1
   MsgBox("Файл: "+DB_name2+" не может быть создан. Ошибка:"+FERROR())
   RETURN NIL
ENDIF
LC_DbCreate( DB_name2, nHandle2, Lc_buf, N_Gos+3 )          // Создание БД.txt, содержащей N_Rec пустых записей ############
*nHandle := FOpen( DB_name, FO_READWRITE )                  // Открытие базы данных ############################################

**** Рассчет массива начальных позиций полей в строке
PRIVATE aPos[N_Col]
aPos[1] = 1
FOR j=2 TO N_Col
    aPos[j] = aPos[j-1] + aInfStruct[j-1,3]
NEXT
* ###########################################################################

Код: Выделить всё
**** Рассчет массива начальных позиций полей в строке
PRIVATE aPos[N_Col]
aPos[1] = 1
FOR j=2 TO N_Col
    aPos[j] = aPos[j-1] + aInfStruct[j-1,3]
NEXT

********************************************
******** Запись поля в Max_БД
********************************************
FUNCTION LC_FieldPut( DB_name, nHandle, mRec, mCol, String )

Pos = (mRec-1) * Len_LcBuf + aPos[mCol] - 1

FSEEK(nHandle, Pos, FS_SET)     // Позиционирование начала поля
Len_str = LEN(String)
N_Write = FWrite( nHandle, String, Len_str )

IF N_Write < Len_str
   aMess := {}
   AADD(aMess, L('Ошибка записи поля: [строка=@, колонка=$] БД: "#".'))
   AADD(aMess, L(' '))
   AADD(aMess, L('Это неустранимая ошибка, возникающая при попытке открытия уже открытой базы данных модели: '+DB_Name+'.'))
   AADD(aMess, L('Скорее всего она возникла из-за того, что перед запуском нового режима не был закрыт предыдущий.'))
   AADD(aMess, L('Работа системы будет прервана. Если после этого сразу запустить режим, в котором возникла ошибка,'))
   AADD(aMess, L('то скорее всего он будет выполнен нормально.'))
   aMess[1] = STRTRAN(aMess[1], "#", DB_Name)
   aMess[1] = STRTRAN(aMess[1], "@", ALLTRIM(STR(mRec)))
   aMess[1] = STRTRAN(aMess[1], "$", ALLTRIM(STR(mCol)))
   LB_Warning(aMess)
*  MsgBox(aMess)
   QUIT
   RETURN(.T.)
ENDIF

RETURN(.F.)

********************************************
******** Считывание поля из Max_БД
********************************************
FUNCTION LC_FieldGet( DB_name, nHandle, mRec, mCol )

*MsgBox('Строка='+ALLTRIM(STR(mRec))+', Колонка='+ALLTRIM(STR(mCol)))

Len_str = aInfStruct[mCol,3]

Pos = (mRec-1) * Len_LcBuf + aPos[mCol] - 1

FSEEK(nHandle, Pos, FS_SET)     // Позиционирование начала поля
String = SPACE(Len_str)
N_Read = FRead( nHandle, @String, Len_str )

IF N_Read < Len_str
   aMess := {}
   AADD(aMess, L('Ошибка считывания поля: [строка=@, колонка=$] БД: "#".'))
   AADD(aMess, L(' '))
   AADD(aMess, L('Это неустранимая ошибка, возникающая при попытке открытия уже открытой базы данных модели: '+DB_Name+'.'))
   AADD(aMess, L('Скорее всего она возникла из-за того, что перед запуском нового режима не был закрыт предыдущий.'))
   AADD(aMess, L('Работа системы будет прервана. Если после этого сразу запустить режим, в котором возникла ошибка,'))
   AADD(aMess, L('то скорее всего он будет выполнен нормально.'))
   aMess[1] = STRTRAN(aMess[1], "#", DB_Name)
   aMess[1] = STRTRAN(aMess[1], "@", ALLTRIM(STR(mRec)))
   aMess[1] = STRTRAN(aMess[1], "$", ALLTRIM(STR(mCol)))
   LB_Warning(aMess)
*  MsgBox(aMess)
   QUIT
   RETURN("")
ENDIF

// Пробел в числовом поле рассматривается как "0"
IF aInfStruct[mCol,2] = "N" .AND. LEN(ALLTRIM(String)) = 0   
   String = "0"
ENDIF

RETURN(String)

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 7:59 am
Eugene Lutsenko
осталось 6 дней до отправки:
https://www.kaggle.com/c/santander-valu ... evaluation

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 12:05 pm
Eugene Lutsenko
Посмотрел лидеров: https://www.kaggle.com/c/santander-valu ... eaderboard
Это настоящие монстры. Они этим всем занимаются давно и профессионально, а мы 1-й раз. И еще был один случай наскоком.

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 12:23 pm
Petrovich
Eugene Lutsenko писал(а):Посмотрел лидеров: https://www.kaggle.com/c/santander-valu ... eaderboard
Это настоящие монстры. Они этим всем занимаются давно и профессионально, а мы 1-й раз. И еще был один случай наскоком.

надо иметь хорошие компьютеры, хороший софт, тогда все получится. Там импользуются современные языки, ориентированные на решение больших задач с большими массивами данных.

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 12:26 pm
Eugene Lutsenko
Хороших компьютеров у нас наверное не будет, даже в перспективе. Хороший софт Дима только-только начал разрабатывать. Но еще нужна хорошая математика и хорошие алгоритмы. А где их взять вообще не очень понятно.

Я посмотрел лидеров и тех, кто имеет критерий в районе 1.7. Это из более 4000 примерно 3300 позиция, т.е. наверное мы пропустим вперед примерно 3/4 команд. Но мне все же интересно, где мы окажемся в этом рейтинге.

У нас было бы больше шансов подняться повыше, если бы была возможность исследовать больше моделей, подобрать различные их параметры. Но на таких объемах данных подготовка обучающей выборки занимает около 70 часов и что-либо подобрать получается сложно. А модули быстрого синтеза модели и быстрого распознавания только-только начинают нормально работать. Но можно будет еще попробовать. Это ведь не последний конкурс на Каггле.

Сейчас запущу формирование обучающей выборки на 1000 классов и по 5 градаций на описательную шкалу.

В текущей модели 200 классов и по 10 градаций описательных шкал. Когда создались модели, я увидел, что из 10 градаций описательных шкал реально используется около 5, а 200 маловато для получения высокой точности.

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 1:25 pm
Eugene Lutsenko
А ты знаешь, как ее добавлять?

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 2:02 pm
Eugene Lutsenko
Ну тогда не все потеряно. Наверное надо реализовать

Re: Santander Value Prediction Challenge

СообщениеДобавлено: Ср авг 08, 2018 2:18 pm
Eugene Lutsenko
Если бы не было этой ерунды я бы не сделал мультитабличной версии системы Эйдос, а ты модулей синтеза модели и распознавания. Может быть и сделали бы, но еще нескоро. Я люблю решать сложные задачи. Они позволяют развивать инструменты их решения.

если ты автоматизируешь нормировку результатов для получения минимального RMSLE, то можно будет попробовать успеть сделать еще одну модель: на 1000 классов и по 5 градаций на описательные шкалы. Она сейчас формируется.