Age和Embarked两个特征是具有缺失值,并且一个是连续性特征,另一个是类别型特征。
train[train['Embarked'].isnull()] # 再从sklearn.impute 导入IterativeImputer from sklearn.experimental import enable_iterative_imputer from sklearn.impute import IterativeImputer from sklearn.ensemble import RandomForestRegressor import pandas as pd # 载入数据 Age特征具有缺失值 Xtrain = train.loc[:, ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare','Embarked']] # 使用随机森林估计器 imp = IterativeImputer(RandomForestRegressor(), max_iter=20, random_state=0) data=imp.fit_transform(Xtrain) data[[61,829],:]RandomForestRegressor把类别型变量预测为连续性,所以在训练集中;连续型变量要和类别型变量分开做插补。
实际上,我们经常会遇到不平衡的数据。如果目标数据只有轻微的不平衡,这并不一定是一个问题。可以通过对数据使用适当的验证措施来解决这个问题,比如平衡精度(Balanced Accuracy)、精确召回曲线(Precision-Recall Curves)或F1分数(F1-score)。
不幸的是,情况并非总是如此,目标变量可能非常不平衡(例如,10:1)。这种情况下,我们可以对该少数类(即样本数少的类别)进行过采样,以便使用一种称为SMOTE的技术来引入平衡。
SMOTE是合成少数类过采样技术 (Synthetic Minority Oversampling Technique)的缩写,是一种用于增加少数类样本的过采样技术。它通过观察目标的特征空间和检测最近邻来生成新的样本。然后,在相邻样本的特征空间内,简单地选择相似的样本,每次随机地改变一列。要实现SMOTE的模块可以在imbalanced-learn包中找到。导入该包并使用fit_resample方法。
“少数类(minority)”:仅重采样少数类;“非少数类(not minority)”:重新采样除少数类以外的其他类;“非多数类(not majority)”:重新采样除了多数类的其他类;‘所有(all)’:重新采样所有类;“词典(dict)”:键为目标类,值对应于每个目标类所需的样本数量。 from imblearn.over_sampling import SMOTE data =train.loc[:,['Pclass', 'Age', 'SibSp', 'Parch', 'Fare','Embarked','Survived']].dropna() X=data.iloc[:,:-1] y=data['Survived'] pd.value_counts(data['Survived']) #把类别1的样本重采样到400 X_resampled, y_resampled = SMOTE(ratio={1: 400},random_state=42).fit_resample(X,y) X_resampled.shape.fit_resample(X,y)