如何解决Smote Upsampling 导致 ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值,但在数据中找不到任何 na
在对我的数据集执行 KMeans 分析后,尝试创建一个训练/测试集以在回归模型中运行。当我使用 SMOTE 进行上采样时,出现以下错误:
ValueError: 输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。
我使用的代码在这里:
from imblearn.over_sampling import SMOTE
# Upsampling using SMOTE
sm = SMOTE(random_state = random_state)
x_train_sm,y_train_sm = sm.fit_resample(x_train,y_train)
print("----------------------------")
print("Original x train shape,",x_train.shape)
print("Resample x train shape,x_train_sm.shape)
起初,我以为我的数据集中有 na,尽管我很确定没有。所以我检查并显示了 0 个空值。也就是说,我继续使用此代码删除所有 na,以防万一。
df = df.dropna()
我仍然收到错误消息。我也没有在数据集中看到任何异常大的值,更不用说,我已经运行了 MLR、Logistic、KNN 和决策树,没问题。
我不知道是什么导致了这种情况。我什至删除了我所有的 float64 列,只是为了查看是否是其中之一导致它,但仍然无法正常工作。有任何想法吗?我的代码如下:
ef Shuffle_data(df):
""" Return shuffled data based on rows """
return shuffle(df).reset_index().drop('index',axis = 1)
def One_hot_encoding(df,feature):
""" Apply one hot encoding to given features """
return pd.concat([df,pd.get_dummies(df[feature])],axis = 1)
def Merge_df(data,features):
""" Return merge dataframe with given features"""
merged_df = pd.DataFrame()
for feature in features:
merged_df = pd.concat([merged_df,data[feature]],axis = 1)
return merged_df
def Normalize_df(data,cols):
""" Normalize features """
for col in cols:
data[col] = Normalize_feature(data[[col]])
return data
def Create_model_df(df,col_cols,nom_cols,binary_cols,num_cols,target_col):
""" Preparing data for modelling """
df_model = Merge_df(df,[col_cols,target_col])
df_model = Shuffle_data(df_model)
df_model = One_hot_encoding(df_model,nom_cols)
df_model.drop(nom_cols,axis = 1,inplace = True)
df_model = Normalize_df(df_model,num_cols)
return (df_model.loc[:,~df_model.columns.isin(target_col)],df_model[target_col].values.flatten())
def Train_test_df(feature,target,test_size):
""" Spliting data to train and test"""
return train_test_split(feature,test_size= test_size,random_state= random_state)
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split,cross_val_score,GridSearchCV,cross_val_predict
df_model_feature,df_model_target = Create_model_df(df_model,cat_cols,nominal_cols,[target_col])
x_train,x_test,y_train,y_test = Train_test_df(df_model_feature,df_model_target,test_size = 0.2)
然后我就用了我一开始贴的SMOTE代码。感谢您帮助修复此错误或指出正确的方向以找出导致此错误的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。