Eu tenho uma X
matriz, uma y
variável e outra variável ORTHO_VAR
. Preciso prever a y
variável usando X
, no entanto, as previsões desse modelo precisam ser ortogonais e, ao ORTHO_VAR
mesmo tempo, estar o mais correlacionadas y
possível.
Eu preferiria que as previsões fossem geradas com um método não paramétrico como, por exemplo, xgboost.XGBRegressor
mas eu poderia usar um método linear se for absolutamente necessário.
Este código:
import numpy as np
import pandas as pd
from sklearn.datasets import make_regression
from xgboost import XGBRegressor
ORTHO_VAR = 'ortho_var'
TARGET = 'target'
PRED = 'yhat'
# Create regression dataset with two correlated targets
X, y = make_regression(n_features=20, random_state=245, n_targets=2)
indep_vars = ['var{}'.format(i) for i in range(X.shape[1])]
# Pull into dataframe
df = pd.DataFrame(X, columns=indep_vars)
df[TARGET] = y[:, 0]
df[ORTHO_VAR] = y[:, 1]
# Fit a model to predict TARGET
xgb = XGBRegressor(n_estimators=10)
xgb.fit(df[indep_vars], df[TARGET])
df[PRED] = xgb.predict(df[indep_vars])
# Correlation should be low or preferably zero
pred_corr_w_ortho = df.corr().abs()[PRED][ORTHO_VAR]
assert pred_corr_w_ortho < 0.01, "Correlation score: {0} is superior to the given threshold.".format(pred_corr_w_ortho)
Retorna isso:
---------------------------------------------------------------------------
AssertionError
1 pred_corr_w_ortho = df.corr().abs()[PRED][ORTHO_VAR]
----> 2 assert pred_corr_w_ortho < 0.01, "Correlation score: {0} is superior to the given threshold.".format(pred_corr_w_ortho)
AssertionError: Correlation score: 0.5895885756753665 is superior to the given threshold.
... e gostaria de algo que mantenha a maior precisão preditiva possível, mantendo-se ortogonal ao ORTHO_VAR
correlation
machine-learning
dataset
logistic-regression
prediction
linear-regression
prediction
dummy-variables
neural-network
image-classification
python
k-nn
python
neural-network
neural-network
deep-learning
keras
tensorflow
image-classification
tensorflow
reinforcement-learning
policy-gradients
machine-learning
decision-trees
neural-network
overfitting
data-analysis
metric
python
scikit-learn
distance
scipy
machine-learning
python
scikit-learn
decision-trees
logistic-regression
keras
image-classification
implementation
machine-learning
python
scikit-learn
random-forest
decision-trees
machine-learning
feature-selection
feature-engineering
word2vec
word-embeddings
natural-language-process
scikit-learn
time-series
clustering
k-means
python
cross-validation
pyspark
statistics
cross-validation
multiclass-classification
evaluation
machine-learning
nlp
machine-translation
neural-network
deep-learning
keras
tensorflow
image-classification
machine-learning
python
similarity
distance
lstm
text
named-entity-recognition
machine-learning
keras
optimization
gan
learning-rate
neural-network
data-mining
dataset
databases
books
neural-network
rnn
Chris
fonte
fonte
Respostas:
Este requisito pode ser atendido adicionando ruído suficiente às previsõesy^ correlacioná-los de valores ortogonais v . Idealmente, sey^ já está correlacionado de v , nenhum ruído seria adicionado a y^ , portanto y^ estaria maximamente correlacionado com y .
Matematicamente, queremos criary^′=y^+ ϵ de ε ~ N( 0 ,σϵ) , satisfazer ry^′v=σy^′vσy^′σv< δ para limiar arbitrário δ . Agora, vamos expandir essa desigualdade para encontrar um limite inferior para o padrão de ruídoϵ , ie σϵ .
σ2y^′σy^′vry^′v=σ2y^+σ2ϵ,= E [ (y^+ ϵ -μy^-μϵ= 0) ( v -μv) ]= E [ (y^-μy^) ( v -μv) ] +E [ϵ(v-μv) ]= 0=σy^v,=σy^′vσy^′σv=σy^vσvσ2y^+σ2ϵ------√< δ⇒σy^(ry^vδ)2- 1----------√<σϵ
Como todas as variáveis no lado esquerdo da desigualdade podem ser calculadas, podemos amostrar ruídos deN( 0 ,σϵ) e adicione-os a y^ para satisfazer a desigualdade original.
Aqui está um código que faz exatamente a mesma coisa:
quais saídas:
Você pode experimentar com outrosy^ para correlacioná-lo de v abaixo 0,01 , que tolera drasticamente y^ de y também.
delta
s. Ao compararstd_y_hat
comstd_noise_lower_bound
, você pode ver que um ruído enorme deve ser adicionado aoNota:δ devido à contagem insuficiente de amostras.
Assertion
pode falhar para limites muito pequenosfonte
new corr_y_hat_target
de ser o mais alto possível comnew corr_y_hat_ortho_var
ser o mais baixo possíveltarget
tivesse uma baixa correlação comorth
,y_hat
(que tem uma alta correlação comtarget
) também teria uma baixa correlação comorth
. Como resultado, um baixo ruído teria sido adicionadoy_hat
e sua correlação comtarget
teria mudado um pouco.