Рубрики
Без рубрики

Коэффициент корреляции Оническу-Питон – Александру Дамиан

Внедрение нового корреляционного метода, основанного на исследовании кинетических энергий

Автор оригинала: Daia Alexandru.

Вот коэффициент корреляции Оническу , основанный на кинетической энергии, подробнее см. Здесь.

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

Это будет действовать как строительный блок для следующей реализации, которая будет опубликована. Простая функция кинетической энергии:

def  kin_energy(random_vec):
    """return    kinetic  energy  of   random vector represented    as   (n,) dimmensional  array"""
    freq=np.unique(random_vec,return_counts=True)
    prob=freq[1]/random_vec.shape[0]
    energy=np.sum(prob**2)
    return  energy
              
import numpy as np
a=np.array([1,3,2,2]])
print(kin_energy(a))
#case with     total energy
a=np.array([1,1,1,1,1,1,1,1,1,1,1,1,1,1])
print(kin_energy(a))
#case  with    converging    to  zero
a=np.array([1,2,3,4,5,6,7,8,9,10])
print(kin_energy(a))
0.375
1.0

Проблема с корреляцией:

Имея 2 случайных вектора

X=x1,x2,..xn=x1,x2,..xN

и

Y=y1,y2,…yN

  1. Информационная корреляция IC ( при этом не используется кинетическая энергия) p(xi)∗p(yi)

IC ограничен между [0,1] , будучи полностью 0, если оба вектора равны нулю ( система полностью индифферентна’.

  1. КОЭФФИЦИЕНТ ИНФОРМАЦИОННОЙ КОРРЕЛЯЦИИ Подобно другим статистическим коэффициентам корреляции, ИС может подвергаться нормализации с использованием кинетической энергии, что приводит к:
O(X,Y)=(∑Ni=0 p(xi)∗p(yi))/(∑Ni=0 xi2∗∑Ni=0 yi2)O(X,Y)=(∑i=0N p(xi)∗p(yi))/(∑i=0N xi2∗∑i=0N yi2)

Обратите внимание, что знаменатель-это просто кинетическая энергия, поэтому коэффициент ICC можно записать как:

O(X,Y)=IC/кинетический(X)*кинетический(Y)O(X,Y)=IC/кинетический(X)*кинетический(Y)

Реальная проблема в номинаторе:

Это означает , что для вычисления точечного произведения там необходимо, чтобы некоторые 2 случайных вектора имели одинаковую мощность уникальных событий( классов)

Например, если∗4+2∗2+1∗5, но что, если 2 случайных вектора выглядят так:,5,1, не имеющие одинаковой формы, отключат коэффициент корреляции для работы , пока не выяснят что-то.

Настройка реализации: defic(vector1,vector2): “””коэффициент возврата информации IC для 2 случайных величин-определяется как точечное произведение вероятностей, соответствующих каждому классу

"""
a=vector1
b=vector2
# get the probs  in order  to    do     dot product with  them 
    prob1=np.unique(a,return_counts=True)[1]/a.shape[0]
    prob2=np.unique(b,return_counts=True)[1]/b.shape[0]
    p1=list(prob1)
    p2=list(prob2)
    diff=len(p1)-len(p2)
    if diff>0:
        for elem in range(diff):
            p2.append(0)
    if diff<0:
        for  elem in range((diff*-1)):
            p1.append(0)
    ic=np.dot(np.

array(p1),np.array(p2)) возвращает ic

And finally after having functions for kinetic energy of a vector and for information correlation , we can define a new function that computes kinetic correlation :
    def  o(vector1,vector2):
    """return onicescu   information   correlation   based on kinetic energy """
    i_c=ic(vector1,vector2)
    o=i_c/np.sqrt(kin_energy(vector1)*kin_energy(vector2))
    return o
    
    Testing some toy use cases .

Обратите внимание, что я обновил формулу, такую как знаменатель, содержащий sqrt, чтобы иметь проблемы, ограниченные между o и 1.

a=np.array([1,2,3,4,5,6,7])
b=np.array([2,3,1,5,7,9,1])
o(a,b)
0.88191710368819676
#Example  2
a=np.array([1,2,3,4,5,6,7])
b=np.array([2,3,1,5,7,9,11])
o(a,b)
1

Имея это , можно было бы просто использовать его вместо перекрестной энтропии или в качестве функций пригодности для генетических algs .

Соответствующий блокнот можно найти здесь: https://github.com/alexandrudaia/kinetic-correlation/blob/master/KInetic_Correlation.ipynb