对于个人知识,我一直在尝试除均值/中位数/众数之外的其他插补方法。到目前为止,我已经能够尝试使用KNN,MICE,中位插补方法。有人告诉我,也可以通过聚类方法进行插补,而我在网上搜索以找到一个仅由研究论文提出的软件包。
我通过在Iris数据集上谨慎地创建缺失值来运行这些估算方法(因为Iris没有缺失值)。我对其他方法的方法如下:
data = pd.read_csv("D:/Iris_classification/train.csv")
#Shuffle the data and reset the index
from sklearn.utils import shuffle
data = shuffle(data).reset_index(drop = True)
#Create Independent and dependent matrices
X = data.iloc[:, [0, 1, 2, 3]].values
y = data.iloc[:, 4].values
#train_test_split
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 50, random_state = 0)
#Standardize the data
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
#Impute missing values at random
prop = int(X_train.size * 0.5) #Set the % of values to be replaced
prop1 = int(X_test.size * 0.5)
a = [random.choice(range(X_train.shape[0])) for _ in range(prop)] #Randomly choose indices of the numpy array
b = [random.choice(range(X_train.shape[1])) for _ in range(prop)]
X1_train[a, b] = np.NaN
X1_test[c, d] = np.NaN
然后,对于KNN归因,我已经完成了
X_train_filled = KNN(3).complete(X_train)
X_test_filled = KNN(3).complete(X_test
有没有一种方法可以通过聚类方法估算缺失值?
另外,当其中包含NaN值时,StandardScaler()不起作用。还有其他标准化数据的方法吗?
最佳答案
我们必须处理的主要问题是您缺少一些数据。
首先,我需要告诉您,删除“问题”行可能非常危险,因为它们可能包含关键信息。
是的,您可以用列中所有值的平均值替换丢失的数据。
您可以使用Inputer
库中的sklearn.preprocessing
类来执行此操作。
from sklearn.preprocessing import Imputer
inputer = Inputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
inputer = inputer.fit(X)
X = inputer.transform(X)
您必须在“创建独立矩阵和从属矩阵”之后,进行缩放等之前使用此方法。
我在下面为您创建了一个简单的示例,以向您展示其工作方式:
之前
之后
关于python - 有没有办法推算机器学习中的缺失值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49854629/