Python学习记录

文章目录

一个小坑

Python读入csv数据,y有着一列有缺失值,前期将缺失值写为nan,读进Python之后被正确识别为缺失值,但是拟合深度学习模型时报错。

处理思路:y缺失的样本不可用,直接取原数据集的子集,运行模型。

代码如下:

import pandas as pd
df = pd.read_csv('/Users/zi/Desktop/data_all.csv')
df_test = pd.read_csv('/Users/zi/Desktop/data_test.csv')

p=5 #协变量维数

df['y'] = df['y'].fillna(-1) #将有缺失的列填补为-1(因为这里未缺失数据为0和1,故不会混淆)


#对x进行标准化
X_train = df.iloc[:,0:p]
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_train = X_train.values  #转化为array形式

#注意:要用训练集的结果来标准化测试集
X_test = df_test.iloc[:, 0:p]
X_test = scaler.transform(X_test)
X_test = X_test.values

#取训练数据因变量未缺失的子集
Y_train = df.iloc[0:trainsize,5]
Y_train = Y_train.values

index_for_null = Y_train != -1

X_train = X_train[index_for_null,] #注意DataFrame格式的数据和np.array取子集代码略有不同,无需在逗号后加 :
Y_train = Y_train[index_for_null,]


#训练模型
model = models.Sequential()
model.add(layers.Dense(40, activation='relu', input_shape=(p+1,)))
for h in range(5):
        model.add(layers.Dense(40, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy', metrics=['accuracy'])  # 等价于metrics =[metircs.binary_accuracy]
model.fit(X_train, Y_train, batch_size=10, epochs=30)

# 测试集结果预测
result1 = model.predict_classes(X_test)
result2 = model.predict(X_test)

# 将测试集上的误差也写入EXCEL
accu_result = model.evaluate(X_train, Y_train, batch_size=100)
error_train = accu_result[1]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值