因学习中发现《Python数据分析与挖掘实战》中的代码,有些不能实现,自己学习的时候走了很多弯路,特此分享可直接实现的代码,希望能让有需要的朋友少走弯路。
6-1部分
#缺失值处理---拉格朗日插值 import pandas as pd from scipy.interpolate import lagrange #导入拉格朗日插值函数 inputfile='../6/missing_data.xls' outfile='../6/out_data.xls' data=pd.read_excel(inputfile,header=None) print(list(data)) def az(s, n, k=5): y = s[list(range(n - k, n)) + list(range(n + 1, n + 1 + k))] y = y[y.notnull()] return lagrange(y.index,list(y))(n) #插值并返回结果 for i in data.columns: for j in range(len(data)): if data[i].isnull()[j]: #注意[j]放后面 data[i][j] = az(data[i], j) data.to_excel(outfile,index=False,header=None)
6-2部分
#数据划分,2-8 import pandas as pd from random import shuffle #导入随机函数shuffle,打散数据 inputfile='../6/model.xls' outfile1='../6/train.xls' outfile2='../6/test.xls' data=pd.read_excel(inputfile) data=data.as_matrix() #将表格转换为矩阵 shuffle(data) #随机打乱数据 train=data[:int(len(data)*0.8),:] test=data[int(len(data)*0.8):,:]
6-3部分-接在6-2下面
#LM神经网络模型 from keras.models import Sequential #导入神经网络初始化函数 from keras.layers.core import Dense,Activation #导入神经层函数、激活函数 netfile='../6/net.model' net=Sequential() #建立神经网络 net.add(Dense(input_dim=3,units=10)) #添加输入层(3节点),到隐藏层(10节点)的连接 net.add(Activation('relu')) #隐藏层使用relu激活函数 net.add(Dense(input_dim=10,units=1)) #添加隐藏层(10节点),到输出层(1节点)的连接 net.add(Activation('sigmoid')) #输出层使用sigmoid激活函数 net.compile(loss='binary_crossentropy',optimizer='adam')#编译模型,使用adam方法求解 net.fit(train[:,:3],train[:,3],epochs=1000,batch_size=1)#训练模型 net.save_weights(netfile) predict_result=net.predict_classes(train[:,:3]).reshape(len(train))#预测结果变形 from cm_plot import * cm_plot(train[:,3],predict_result).show()