Python数据分析与挖掘实战 第6章

因学习中发现《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()


猜你喜欢

转载自blog.csdn.net/lonely2018/article/details/80164795