Re: Santander Value Prediction Challenge
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Молодец. Когда сделают видеокарты на миллиард мегапикселей этот вопрос снимется сам собой
International Journal
http://chaosandcorrelation.org/ForumCC/
http://chaosandcorrelation.org/ForumCC/viewtopic.php?f=1&t=581
// Сброс массива-локатора кодов признаков распознаваемого объекта
AFILL(Ar_Lok,0)
M_SumLok = 0 // Сумма 1 и 0 массива-локатора
SELECT Rso_Kpr;SET ORDER TO 1;T=DBSEEK(STR(M_KodObj,19))
IF T
******** Цикл по признакам одного объекта
DO WHILE M_KodObj = Kod_obj .AND. .NOT. EOF()
FOR j=2 TO 8
M_Kpr = FIELDGET(j)
IF 0 < M_Kpr .AND. M_Kpr <= N_Gos // Проверка на корректность кода признака
// Если признак указан у объкта несколько раз, значит он у него и встречается несколько раз,
// например буква "о" в слове "молоко" встречатся 3 раза
* DC_DebugQout( M_Kpr )
Ar_Lok[M_Kpr] = Ar_Lok[M_Kpr] + 1
++M_SumLok // Сумма 1 и 0 массива-локатора
ENDIF
NEXT
DBSKIP(1)
ENDDO
ENDIF
******* Массив кодов классов, к которым ФАКТИЧЕСКИ относится данный объект
PRIVATE Ar_Kcl := {}
SELECT Rso_Kcl;SET ORDER TO 1;T=DBSEEK(STR(M_KodObj,19))
IF T
******** Цикл по классам одного объекта
DO WHILE M_KodObj = Kod_obj .AND. .NOT. EOF()
FOR j=2 TO 5
M_Kcl = FIELDGET(j)
IF 0 < M_Kcl .AND. M_Kcl <= N_Cls // Проверка на корректность кода класса
AADD(Ar_Kcl, M_Kcl)
ENDIF
NEXT
DBSKIP(1)
ENDDO
ENDIF
* // Проверка правильности выборки кодов классов и признаков
* Mess = L("Код распознаваемого объекта: "+ALLTRIM(STR(M_KodObj,19))+". Коды классов: "
* FOR j=1 TO LEN(Ar_Kcl)
* Mess = Mess+ALLTRIM(STR(Ar_Kcl[j],19))+" "
* NEXT
* Mess = Mess + ". Коды признаков: "
* FOR j=1 TO LEN(Ar_Lok)
* IF Ar_Lok[j] > 0
* Mess = Mess+ALLTRIM(STR(j,19))+" "
* ENDIF
* NEXT
* LB_Warning(Mess)
// Использование полученных массивов собственно для распознавания
***** Расчет среднего и дисперсии массива-локатора
M_SrObj = M_SumLok/N_Gos // Среднее 1 и 0 массива-локатора
M_DiObj = 0 // Дисперсия 1 и 0 массива-локатора
FOR i=1 TO N_Gos
M_DiObj = M_DiObj + ( M_SrObj - Ar_Lok[i]) ^ 2
NEXT
M_DiObj = SQRT( M_DiObj / (N_Gos - 1)) // Дорасчет дисперсии 1 и 0 массива-локатора
* DC_DebugQout( { Alias(), IndexOrd() } )
IF M_DiObj > 0 // Объект описан
aKod_obj := {}
aKod_cls := {}
aKorr := {}
aSum_inf := {}
aDate := {}
aTime := {}
aFakt := {}
FOR j = 1 TO N_Cls // Цикл по классам распознавания в Inf
IF aDiCls[j] > 0 // Сформирован ли класс распознавания ?
****** Расчет нормированной к 100% корреляции массивов
****** локатора источника и информативностей признаков класса
****** (ИНТЕГРАЛЬНЫЙ КРИТЕРИЙ СХОДСТВА) *********************
****** и суммы информативностей имеющихся у объекта признаков
M_SumInf = 0 // Сумма информативностей признаков, имеющихся в описании объекта
M_Kov = 0 // Ковариация между образом объекта и классом
FOR i=1 TO N_Gos
Iij = VAL(LC_FieldGet(mModelName, nHandle[M_CurrInf], i, 2+j)) // Iij из БД текущей модели
M_Kov = M_Kov + (Ar_Lok[i] - M_SrObj) * (Iij - aSrCls[j])
M_SumInf = M_SumInf + Ar_Lok[i] * Iij
NEXT
M_Kov = 100 * M_Kov / N_Gos
M_Korr = M_Kov / (M_DiObj * aDiCls[j] ) // Корреляция между образом объекта и классом
AADD(aKod_obj, M_KodObj)
AADD(aKod_cls, j )
AADD(aKorr , M_Korr )
AADD(aSum_inf, M_SumInf)
AADD(aDate , DTOC(DATE()))
AADD(aTime , TIME())
*** Если распознаваемый объект ФАКТИЧЕСКИ относится к классу
*** с кодом j, то поставить символ "√" в поле БД Rasp
*** иначе поставить там пробел
IF ASCAN(Ar_Kcl, j) > 0
AADD(aFakt, "√")
ELSE
AADD(aFakt, " ")
ENDIF
ENDIF
NEXT
****** Записать результаты распознавания в БД Rasp
SELECT Rasp // Если сделать массивы для полей БД Rasp
FOR j=1 TO LEN(aKod_obj)
APPEND BLANK // и записывать результаты распознавания вне цикла по Inf, то все очень ускорится ###################
REPLACE Kod_obj WITH aKod_obj[j]
REPLACE Kod_cls WITH aKod_cls[j]
* REPLACE Kod_ClSc WITH aKodClSc[aKod_cls[j]]
REPLACE Korr WITH aKorr[j]
REPLACE Sum_inf WITH aSum_inf[j]
REPLACE Date WITH aDate[j]
REPLACE Time WITH aTime[j]
REPLACE fakt WITH aFakt[j]
NEXT
ENDIF
IF Regim<>"3_5";lOk = Time_Progress (++Time_Progress, Wsego, oProgress, lOk );ENDIF
SELECT Rso_zag
DBSKIP(1)
ENDDO
aSay[ 8]:SetCaption(aSay[ 8]:caption+L(" - Готово "))
// Конец цикла по объектам распознаваемой выборки и их распознавание =================================
****** Расчет нормированной к 100% корреляции массивов
****** локатора источника и информативностей признаков класса
****** (ИНТЕГРАЛЬНЫЙ КРИТЕРИЙ СХОДСТВА) *********************
****** и суммы информативностей имеющихся у объекта признаков
M_SumInf = 0 // Сумма информативностей признаков, имеющихся в описании объекта
M_Kov = 0 // Ковариация между образом объекта и классом
FOR i=1 TO N_Gos
Iij = VAL(LC_FieldGet(mModelName, nHandle[M_CurrInf], i, 2+j)) // Iij из БД текущей модели
M_Kov = M_Kov + (Ar_Lok[i] - M_SrObj) * (Iij - aSrCls[j])
M_SumInf = M_SumInf + Ar_Lok[i] * Iij
NEXT
M_Kov = 100 * M_Kov / N_Gos
M_Korr = M_Kov / (M_DiObj * aDiCls[j] ) // Корреляция между образом объекта и классом