python - 有没有办法在机器学习中估算缺失值?

标签 python machine-learning imputation

就个人知识而言,我一直在尝试均值/中值/众数以外的不同插补方法。到目前为止,我能够尝试 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() 不起作用。有没有其他方法可以标准化数据?

最佳答案

我们必须处理的主要问题是您丢失了一些数据。

首先,我需要告诉你,删除“问题”行可能非常危险,因为它们可能包含重要信息。

Is there a way to impute missing values by clustering?

是的,您可以用列中所有值的平均值替换缺失的数据。

您可以使用 sklearn.preprocessing 库中的 Inputer 类来执行此操作。

from sklearn.preprocessing import Imputer
inputer = Inputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
inputer = inputer.fit(X)
X = inputer.transform(X)

您必须在“创建独立和相关矩阵”之后、缩放和其他之前立即使用此方法。

我在下面为您创建了一个简单示例,以向您展示它是如何工作的:

之前

enter image description here

之后

enter image description here

关于python - 有没有办法在机器学习中估算缺失值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49854629/

相关文章:

python - 在生成所有可能的组合时 itertools.combinations_with_replacement() 与 itertools.product()?

python - 日期减法导致 "TypeError: cannot perform truediv with this index type datetimeindex"

python - csv 数据库的 Keras 索引越界错误

python-3.x - 如何使用Python提取点的x坐标

python - Pandas DataFrames 列未被识别为数字

python - 如何使用python请求正确形成对该网站的POST请求

python - 使用迭代和集合重写列表(根据条件删除条目)

python - 使用sklearn.model_selection分割不平衡数据集

r - 如何通过变量对多个数据框进行子集化?

python - 基于组的 Pandas 和 fillna