Ich habe eine X
Matrix, eine y
Variable und eine andere Variable ORTHO_VAR
. Ich muss die y
Variable vorhersagen , wobei X
die Vorhersagen aus diesem Modell orthogonal sein müssen, ORTHO_VAR
während sie so korreliert y
wie möglich sind.
Ich würde es vorziehen, wenn die Vorhersagen mit einer nicht parametrischen Methode wie erzeugt werden, xgboost.XGBRegressor
aber ich könnte eine lineare Methode verwenden, wenn dies absolut notwendig ist.
Dieser Code:
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)
Gibt Folgendes zurück:
---------------------------------------------------------------------------
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.
... und ich möchte etwas, das so viel Vorhersagegenauigkeit wie möglich beibehält und dabei orthogonal zu bleibt 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
quelle
quelle
Antworten:
Diese Anforderung kann erfüllt werden, indem Vorhersagen ausreichend Rauschen hinzugefügt wirdy^ um sie von orthogonalen Werten zu dekorrelieren v . Idealerweise, wenny^ ist bereits dekorreliert von v würde kein Rauschen hinzugefügt werden y^ also y^ wäre maximal korreliert mit y .
Mathematisch wollen wir schaffeny^'=y^+ ϵ von ϵ ∼ N.( 0 ,σϵ) , befriedigen ry^'v=σy^'vσy^'σv< δ für beliebige Schwelle δ . Erweitern wir nun diese Ungleichung, um eine Untergrenze für Standardrauschen zu findenϵ dh σϵ .
σ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- -- -- -- -- -- -- -- -- -- -√<σϵ
Da alle Variablen auf der linken Seite der Ungleichung berechnet werden können, können wir Rauschen aus abtastenN.( 0 ,σϵ) und füge sie hinzu y^ die ursprüngliche Ungleichung zu befriedigen.
Hier ist ein Code, der genau dasselbe tut:
welche Ausgänge:
Sie können mit andereny^ zu dekorrelieren v unten 0,01 , die dramatisch dekoleriert y^ von y zu.
delta
s experimentieren . Im Vergleichstd_y_hat
mitstd_noise_lower_bound
können Sie sehen, dass ein großes Rauschen hinzugefügt werden mussHinweis:δ aufgrund unzureichender Probenzahl.
Assertion
Möglicherweise schlägt dies bei zu kleinen Schwellenwerten fehlquelle
new corr_y_hat_target
so hoch wie möglich seinnew corr_y_hat_ortho_var
, um so niedrig wie möglich zu seintarget
mit einer geringen Korrelation hatorth
,y_hat
(die eine hohe Korrelation mit hattarget
) würde hatte auch eine geringe Korrelation mitorth
. Infolgedessen wäre ein geringes Rauschen hinzugefügt worden,y_hat
und seine Korrelation mittarget
hätte sich geringfügig geändert.