[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

Santander Value Prediction Challenge

Модераторы: ТВЧ, Petrovich

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Вт авг 07, 2018 4:09 pm

нужен поиск двух констант. я сразу и говорил, что для всех моделей и инт.критериев, как в 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
Я только имя файла поменял
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Вт авг 07, 2018 5:52 pm

посмотрим значение критерия, который удастся получить и пошлем результаты распознавания в самой лучшей модели. У меня получалось что-то около 1.763
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Ср авг 08, 2018 6:37 am

Послал тебе на почту правильные и неправильные матрицы моделей и как они выглядят в системе Эйдос. Ниже мои функции работы с этими текстовыми матрицами. Эти функции обеспечивают работу с текстовыми матрицами любой размерности практически как 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)
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Ср авг 08, 2018 7:59 am

осталось 6 дней до отправки:
https://www.kaggle.com/c/santander-valu ... evaluation
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Ср авг 08, 2018 12:05 pm

Посмотрел лидеров: https://www.kaggle.com/c/santander-valu ... eaderboard
Это настоящие монстры. Они этим всем занимаются давно и профессионально, а мы 1-й раз. И еще был один случай наскоком.
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Petrovich » Ср авг 08, 2018 12:23 pm

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

надо иметь хорошие компьютеры, хороший софт, тогда все получится. Там импользуются современные языки, ориентированные на решение больших задач с большими массивами данных.
Аватара пользователя
Petrovich
Site Admin
 
Сообщения: 10267
Зарегистрирован: Сб мар 06, 2010 12:05 pm
Откуда: Toronto, Canada

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Ср авг 08, 2018 12:26 pm

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

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

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

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

В текущей модели 200 классов и по 10 градаций описательных шкал. Когда создались модели, я увидел, что из 10 градаций описательных шкал реально используется около 5, а 200 маловато для получения высокой точности.
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Ср авг 08, 2018 1:25 pm

А ты знаешь, как ее добавлять?
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Ср авг 08, 2018 2:02 pm

Ну тогда не все потеряно. Наверное надо реализовать
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Santander Value Prediction Challenge

Сообщение Eugene Lutsenko » Ср авг 08, 2018 2:18 pm

Если бы не было этой ерунды я бы не сделал мультитабличной версии системы Эйдос, а ты модулей синтеза модели и распознавания. Может быть и сделали бы, но еще нескоро. Я люблю решать сложные задачи. Они позволяют развивать инструменты их решения.

если ты автоматизируешь нормировку результатов для получения минимального RMSLE, то можно будет попробовать успеть сделать еще одну модель: на 1000 классов и по 5 градаций на описательные шкалы. Она сейчас формируется.
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Пред.След.

Вернуться в Chaos and Correlation

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

cron