IterativeImputer дает сомнительные результаты - как проверить? - PullRequest
0 голосов
/ 21 февраля 2020

у меня есть следующий фрейм данных в ссылке в виде csv, он передает информацию о звездах.

в столбцах с именами IRAC_1 и IRAC_2 имеются ошибочные измерения, которые можно отследить с помощью значение -1.00 в соответствующих столбцах ошибок ('IRAC_1_err', 'IRAC_2_err').

Я пытался использовать IterativeImputer из sklearn, но мои результаты кажутся неверными, причина моих сомнений в том, что неисправность измерения показывают ~ 0,99 корреляцию между IRAC_1 и IRAC_2, но после использования IterativeImputer я ясно получаю вмененные значения, которые менее коррелированы, чем это.

мой код:

%matplotlib notebook
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
#deleting rows with faulty measurements temporarily 
data_miss=data.drop(data.loc[data['IRAC_2_err']<-0.99].index,axis='rows')
plt.figure(figsize=[10,10])
sns.heatmap(data_miss.iloc[:,:-11].corr(),annot=True)
#i first performed linear regression to impute the cases where 'IRAC_2' is faulty and 
'IRAC_1' isn't. perhaps that wasn't needed? i would love to know. 

#filling in the 26 values of IRAC_2 based on relationship with IRAC_1
data.iloc[data.loc[(data['IRAC_2_err']<-0.99) & (data['IRAC_1_err']>-0.99)].index,12]=regressor.predict(np.array((data.iloc[data.loc[(data['IRAC_2_err']<-0.99) & (data['IRAC_1_err']>-0.99)].index,11])).reshape(-1,1))[:]

#replacing faulty value with Nans
data.iloc[data.loc[data['IRAC_1_err']<-0.99].index,12]=np.nan
data.iloc[data.loc[data['IRAC_1_err']<-0.99].index,11]=np.nan

здесь я выполняю фактическое вменение. затем я смотрю на вмененные значения (я объединяю IRA C до и после вменения и смотрю на строки, которые показывают Нанс) и вижу, что между ними корреляция менее сильна, чем раньше.

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
imp = IterativeImputer(max_iter=10, random_state=None)
data_clean=imp.fit_transform(data)
data_clean=pd.DataFrame(data_clean,columns=data.columns)

#correlation of data with faulty measurements removed
data_miss.iloc[:,11:13].corr()

#correlation of data with imputed values
data_clean.iloc[:,11:13].corr()

это нормальная разница? Я подозреваю, что это вносит предвзятость, и, поскольку я выполняю эту процедуру впервые, мне интересно, возможно, я что-то сделал не так.

Еще один вопрос, который у меня возник, состоит в том, как я могу реализовать другую оценку, мягко говоря, по меньшей мере. оценка квадратов. я знаю, что IterativeImputer по умолчанию использует оценку риджа, и я хотел посмотреть, что произойдет при другой оценке.

большое спасибо !!

...