关闭

[置顶] 利用Logistic回归预测疝气病症的病马的死亡率

标签: Logictic回归机器学习
855人阅读 评论(0) 收藏 举报
分类:

数据来源

http://archive.ics.uci.edu/ml/machine-learning-databases/horse-colic

处理过程

由于该数据集存在30%的缺失,那么首先必须对数据集进行预处理,这里我把缺失值用每列的平均值来代替,同时把数据集没用的几列数据舍弃。之后利用sklearn库进行Logistic回归。


代码与数据已经打包上传,如果有需要请移步:
http://download.csdn.net/detail/qq_30091945/9822726


结果:
由于有30%的数据缺失,不可避免误差过大。


Python代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/4/23 0023 7:59
# @Author  : Aries
# @Site    : 
# @File    : 疝气症预测病马死亡率.py
# @Software: PyCharm Community Edition

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression

def GetData(path):
    """
    :param path: 数据集路径
    :return: 返回数据集
    """

    Data = []
    Label = []

    #没有用的属性的下标
    index = [2,24,25,26,27]

    with open(path) as f:
        for line in f.readlines():
            LineArr = line.strip().split(" ")
            m = np.shape(LineArr)[0]
            data = []
            for i in range(m):
                if i in index:
                    #没有用的属性直接跳过
                    continue
                elif i == 22:
                    #下标为22的属性是分类
                    #1代表活着,标记设为1
                    #2,3分别代表死亡,安乐死,标记设为0
                    if LineArr[i] == '?':
                        Label.append(0)
                    elif int(LineArr[i]) == 1:
                        Label.append(1)
                    else:
                        Label.append(0)
                else:
                    #剩下的是有用数据
                    if LineArr[i] == '?':
                        #缺失数据首先由0代替
                        data.append(0.0)
                    else:
                        data.append(float(LineArr[i]))
            Data.append(data)
        Data = np.array(Data)
        Label = np.array(Label)

    return Data,Label

def ZeroProcess(data):
    """
    :param data:需要进行0值处理的数据
    :return: 返回把0值已经处理好的数据
    """

    m,n = np.shape(data)
    for i in range(n):
        avg = np.average(data[:,i])
        if np.any(data[:,i]) == 0:
            for j in range(m):
                data[j][i] = avg
        else:
            continue

    return data

def autoNorm(Data):
    """
    :param Data: 需要进行归一化的数据
    :return: 进行Max-Min标准化的数据
    """

    #求出数据中每列的最大值,最小值,以及相应的范围
    data_min = Data.min(0)
    data_max = Data.max(0)
    data_range = data_max-data_min

    #进行归一化
    m = np.shape(Data)[0]
    Norm_Data = Data - np.tile(data_min,(m,1))
    Norm_Data = Norm_Data / data_range

    return Norm_Data

def PreProcess(data):
    """
    数据预处理,包括0值处理和归一化
    :param data:需要处理的数据
    :return: 已经处理好的数据
    """

    #对数据进行0值处理
    Non_Zero_Data = ZeroProcess(data)

    #对数据进行归一化
    Norm_Data = autoNorm(Non_Zero_Data)

    return  Norm_Data

def run_main():
    """
        这是主函数
    """

    #导入训练与测试数据集
    path1 = "./horse_colic_train.txt"
    path2 = "./horse_colic_test.txt"
    Train_Data,Train_Label = GetData(path1)
    Test_Data,Test_Label = GetData(path2)

    #数据预处理,包括0值处理和归一化
    Train_Data_Precess = PreProcess(Train_Data)
    Test_Data_Process = PreProcess(Test_Data)

    #设置matplotlib,能让它显示中文
    mpl.rcParams['font.sans-serif'] = [u'simHei']
    mpl.rcParams['axes.unicode_minus'] = False

    #训练Logistic回归算法
    logistiic_regression = LogisticRegression()
    model = logistiic_regression.fit(Train_Data_Precess,Train_Label)
    print("Logistic回归的系数为:", logistiic_regression.coef_, "常数项为:", logistiic_regression.intercept_)

    #对Logistic回归算法进行测试
    Train_Label_Predict = logistiic_regression.predict(Train_Data_Precess)
    error = 0.0
    for i in range(len(Train_Label)):
        if Train_Label[i] != Train_Label_Predict[i]:
            error = error + 1.0
    error = error / len(Train_Label)
    avg = np.average(Train_Label)
    TSS = np.sum((Train_Label-avg)**2)
    RSS = np.sum((Train_Label_Predict-Train_Label)**2)
    R2 = 1 - RSS/TSS
    print("训练样本的误差为:",error)
    print("R2为:",R2)

    #测试新数据
    Test_Label_Predict = logistiic_regression.predict(Test_Data_Process)
    err = 0.0
    for i in range(len(Test_Label_Predict)):
        print(Test_Label[i],Test_Label_Predict[i])
        if Test_Label_Predict[i] != Test_Label[i]:
            err = err + 1.0
    err = err / len(Test_Label)
    print("误差为:",err)

if __name__ == "__main__":
    run_main()
1
0
查看评论

常见疾病诊断专家系统

  • 2015-10-02 14:54
  • 421KB
  • 下载

Logistic回归---从疝气病症预测马的死亡率

#!/usr/bin/python # -*- coding: utf-8 -*- #coding=utf-8from numpy import *#打开文本文件并逐行读取,每行前两个值为x1,x2,第3列为类别标签 #为方便计算,将x0设为1.0 def loadDataSet(): ...
  • u012319493
  • u012319493
  • 2016-06-08 14:10
  • 617

《机器学习实战》Logisic回归算法(2)之从疝气病症预测病马的死亡率

============================================================================================ 《机器学习实战》系列博客是博主阅读《机器学习实战》这本书的笔记,包含对其中算法的理解和算法的Python代码实现 ...
  • Gamer_gyt
  • Gamer_gyt
  • 2016-04-25 15:03
  • 3410

《机器学习实战》学习笔记:Logistic回归&预测疝气病证的死亡率

生活中,人们经常会遇到各种最优化问题,比如如何在最短时间从一个地点到另外一个地点?如何在投入最少的资金而却能得到最高的受益?如何设计一款芯片使其功耗最低而性能最好?这一节就要学习一种最优化算法——Logistic回归...
  • liyuefeilong
  • liyuefeilong
  • 2015-09-20 19:13
  • 2941

Python3《机器学习实战》学习笔记(七):Logistic回归实战篇之预测病马死亡率

本文对梯度上升算法和改进的随机梯度上升算法进行了对比,总结了各自的优缺点,并对sklearn.linear_model.LogisticRegression进行了详细介绍。
  • c406495762
  • c406495762
  • 2017-09-05 15:22
  • 3532

Logistic回归实战篇之预测病马死亡率(二)

作 者:崔家华 编 辑:李文臣 三、从疝气病症状预测病马的死亡率 1、实战背景 本次实战内容,将使用Logistic回归来预测患疝气病的马的存活问题。原始数据集下载地址:http://archive.ics.uci.edu/ml/datasets/Horse+Colic ...
  • SzM21C11U68n04vdcLmJ
  • SzM21C11U68n04vdcLmJ
  • 2017-10-17 00:00
  • 222

Logistic回归实战篇之预测病马死亡率(三)

作 者:崔家华 编 辑:李文臣 四、使用Sklearn构建Logistic回归分类器 开始新一轮的征程,让我们看下Sklearn的Logistic回归分类器! 官方英文文档地址:http://scikit-learn.org/dev/modules/generated/skl...
  • SzM21C11U68n04vdcLmJ
  • SzM21C11U68n04vdcLmJ
  • 2017-10-21 00:00
  • 631

logistic回归算法学习笔记-从疝气症预测病马死亡率

#coding=utf-8 from numpy import * #数据集的获取 def loadDataSet(): dataMat=[];labelMat=[] fr = open('testSet.txt') for line in fr.readli...
  • lxslx
  • lxslx
  • 2017-06-25 11:19
  • 106

机器学习--Logistic Regression(scikit-learn_ 预测疝气病症病马死亡率问题)

据说,心情不好的时候,整理东西可以让好心情回归,那么同理,懒散得想要沉沦时候,总结知识可以召回学习的神龙。 学习回顾: 认识sklearn:scikit-learn,Python库之一,Scipy(Scientific Python,Python科学计算)工具集的一部分,该库整合了多种机器...
  • proplume
  • proplume
  • 2017-12-03 21:21
  • 73

Python3:《机器学习实战》之Logistic回归(3)预测病马死亡率

Python3:《机器学习实战》之Logistic回归(3)预测病马死亡率 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://github.com/WordZzzz/ML/tree/master/Ch05 操作系统:WINDOWS 10 ...
  • u011475210
  • u011475210
  • 2017-09-17 20:57
  • 3574
    个人资料
    • 访问:155550次
    • 积分:4927
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论