Оптимизация двоичного вывода Python - PullRequest
0 голосов
/ 10 октября 2018

Я написал следующий код.Целью этого кода является создание (двоичного) столбца с заданной корреляцией с первым (двоичным) столбцом.

Однако он создает столбец с необходимой корреляцией, но созданный столбец не является двоичным.

col1 =  np.random.randint(2,size=(10,2))
df = pd.DataFrame(col1)
corr_intra_semaine =0.61
corr_inter_semaine =0.57
start_1 =0
end_1=1

def f(corr, x, start_1, end_1):
    y = 0
    for k in range(start_1, end_1 + 1):
        y += abs(corr - pearsonr(df.iloc[:,k] , x)[0])    
    return y 


for i in range(1, len(df.columns)):
    df.iloc[:,i] = minimize(lambda x :  f(corr_intra_semaine, x, 0, i-1) 
                            , np.random.rand(len(df))).x

df

Результат этой программы следующий:

 0 -    0.000000
 0 -    0.579208
 0 -    0.968021
 1 -    0.938635
 0 -    0.639041
 0 -    0.503649
...

Что я хочу, чтобы df[:,i] был двоичным вектором.Вот такой вывод

 0 -    0
 0 -    1
 0 -    0
 1 -    1
 0 -    0
 0 -    1
...

У вас есть идеи, как это решить?

1 Ответ

0 голосов
/ 10 октября 2018

np.random.rand(len(df)) числа с плавающей запятой из интервала [0, 1).Как насчет замены его подпрограммой, которая случайным образом возвращает 0 или 1?

numpy.random.randint(2, size=len(df))

В минимизации вы не сможете использовать арифметику с плавающей запятой впоследствии, потому что это снова даст значения с плавающей запятой.При данной настройке вы не можете рассчитывать на получение точного значения корреляции для каждого входа, но, тем не менее, вы можете изменять значения от 0 до 1 или наоборот, если это увеличивает или уменьшает корреляцию в правильном направлении.

Другим подходом может быть выборка таким образом, чтобы непосредственно получить хорошее приближение.

...