• 利用LM神经网络和决策树去分类


    # -*- coding: utf-8 -*-
    import pandas as pd
    from scipy.interpolate import lagrange
    from matplotlib import pyplot as plt
    from random import shuffle
    from keras.models import Sequential #导入神经网络初始化函数
    from keras.layers.core import Dense, Activation #导入神经网络层函数、激活函数
    # inputfile='F:\python数据挖掘\chapter6\chapter6\demo\data\missing_data.xls'
    # outputfile='F:\python数据挖掘\chapter6\chapter6\demo\tmp\missing_data_sale.xls'
    # data=pd.read_excel(inputfile,header=None)
    
    datafile = 'F:\python数据挖掘\chapter6\chapter6\demo\data\model.xls'
    data = pd.read_excel(datafile)
    #print(data)
    #print(type(data))
    data = data.as_matrix()#转换成矩阵或者是数组型,对数据进行操作。
    shuffle(data)#随机扰乱数据
    #print(data)
    
    p = 0.8 #设置训练数据比例
    train = data[:int(len(data)*p),:]
    test = data[int(len(data)*p):,:]
    #
    #
    netfile = 'F:\python数据挖掘\chapter6\chapter6\demo\tmp\net.model1' #构建的神经网络模型存储路径
    #
    net = Sequential() #建立神经网络
    net.add(Dense(input_dim=3,output_dim=10)) #添加输入层(3节点)到隐藏层(10节点)的连接
    #net.add(Dense(32, input_dim=16))
    net.add(Activation('relu')) #隐藏层使用relu激活函数
    net.add(Dense(input_dim=10, output_dim=1)) #添加隐藏层(10节点)到输出层(1节点)的连接
    net.add(Activation('sigmoid')) #输出层使用sigmoid激活函数
    net.compile(loss = 'binary_crossentropy', optimizer = 'adam', class_mode = "binary") #编译模型,使用adam方法求解
    
    net.fit(train[:,:3], train[:,3], nb_epoch=2, batch_size=1) #训练模型,循环1000次,Keras模块中的batch_size指的就是小批量梯度下降法。
    net.save_weights(netfile) #保存模型
    
    #predict_result = net.predict_classes(train[:,:3]).reshape(len(train)) #预测结果变形
    '''这里要提醒的是,keras用predict给出预测概率,predict_classes才是给出预测类别,而且两者的预测结果都是n x 1维数组,而不是通常的 1 x n'''
    #
    # from cm_plot import * #导入自行编写的混淆矩阵可视化函数
    # cm_plot(train[:,3], predict_result).show() #显示混淆矩阵可视化结果
    #
    from sklearn.metrics import roc_curve #导入ROC曲线函数
    #
    predict_result = net.predict(test[:,:3]).reshape(len(test))
    fpr, tpr, thresholds = roc_curve(test[:,3], predict_result, pos_label=1)
    print(fpr,tpr)
    plt.plot(fpr, tpr, linewidth=2, label = 'ROC of LM') #作出ROC曲线
    plt.xlabel('False Positive Rate') #坐标轴标签
    plt.ylabel('True Positive Rate') #坐标轴标签
    plt.ylim(0,1.05) #边界范围
    plt.xlim(0,1.05) #边界范围
    plt.legend(loc=4) #图例
    plt.show() #显示作图结果

    结果画出的图如上面所示。

    主要步骤为:

    第一:从原始数据中随机性的抽取数据,然后进行数据探索分析数据,数据探索分析包括:

    1.数据清洗

    2.缺失值处理

    3.数据变换

    第二:建模样本数据

    1.模型训练

    2.模型评价

    第三:预处理后诊断数据

    第四:自动诊断

    第五:根据诊断结果进行模型的优化与重构

    最后,再进行模型的训练和评价。

  • 相关阅读:
    Java SE(2)
    Java SE(1)
    第二次作业
    Markdown 进阶
    关于主题
    Markdown入门指南
    网络游戏架构与微服务架构简单对比
    微服务框架的存储架构
    轻量级微服务框架的通信架构
    页面静态化
  • 原文地址:https://www.cnblogs.com/caicaihong/p/5852474.html
Copyright © 2020-2023  润新知