大家好,之前写多了自动化办公的内容,现在换个机器学习的专题跟大家交流学习,作为一个眼科研究生后面也希望后面多通过一些眼科案例顺带普及下眼科知识!在眼科中AI的一项应用就是利用卷积神经网络实现图像识别。今天先从一个虚构的冠心病数据集说说python如何实现简单的有监督学习。数据说明

因文章以分享技术为目的,疾病数据集不含有现实意义,且出于保护目的将四个特征指标以S1-S4替代

400+多位病人的数据,包含年龄、性别(1为男性,2为女性),S1-S4为4个冠心病检测指标,Results是冠心病高相关性的定量指标,也是我们本次设计模型需要预测的指标。有监督学习是指有目标变量或预测目标的机器学习方法,包括分类和回归

本例中需要预测的是连续的定量指标,属于回归问题。作为入门介绍就简单利用scikit-learn库中的LinearRegression()实现初步代码实现

首先导入需要的库并设置好文件路径import pandas as pd

# 分隔训练集和测试集,本例用7:3

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

import os

# 利用函数定位到桌面文件夹,个人习惯。可指定绝对路径

def GetDesktopPath():

return os.path.join(os.path.expanduser('~'), 'Desktop')

dat_path = f'{GetDesktopPath()}\\data\\冠心病.csv'

指定特征列(需要纳入预测模型的指标)features = ['Age', 'Sex', 'S1', 'S2', 'S3', 'S4']

读取数据集并分隔CAD_data = pd.read_csv(dat_path)

X = CAD_data[features].values

y = CAD_data['Results'].values

# 分割数据集,本例训练集和测试集分割比例为7:3

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=3/10, random_state=10)

random_state参数设置的好处:读入数据集如果是有序整理好的,如果不随机则模型构建效果大打折

类似于R语言的set.seed()函数,设定生成随机数的种子,让结果能够重现

现在建立线性回归模型,并进行训练及验证linear_model = LinearRegression()

linear_model.fit(X_train, y_train)

R2 = linear_model.score(X_test, y_test)

print('基础线性模型的R2值为:{:.4f}'.format(R2))

# 基础线性模型的R2值为:0.4100模型优化

上述基础线性回归模型存在几个问题:不同的数值变量所处的范围不同,可以考虑归一化,消除量纲或者其他因素可能引入的偏差,影响模型精度。有一种常用方法是将数值线性缩放到 [-1, 1] 或 [0, 1]

性别是分类变量,男女彼此没有高低之分。抽象来说就是离散特征的取值之间没有大小的意义,但用 1 和 0 代替分类变量进入模型中会引入数值大小的区别。数据预处理针对这类变量可以考虑使用独热编码 (One-Hot Encode),又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码。独热编码在各类算法中运用广泛,这里只是非常简单的运用。简单理解就是男性 -> [0, 1],女性 -> [1, 0]

综上,对特征进行分类后分别进行相应的处理,有时会使模型性能提升。这属于特征工程的范畴,仅类别特征可再细分为:

有兴趣的读者可以自行了解。下面是优化模型的代码。

首先引入所需库import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

import os

# 引入numpy库做多维数据合并

import numpy as np

# 数据预处理用到的独热编码和最大最小归一化

from sklearn.preprocessing import OneHotEncoder, MinMaxScaler

def GetDesktopPath():

return os.path.join(os.path.expanduser('~'), 'Desktop')

dat_path = f'{GetDesktopPath()}\\data\\冠心病.csv'

特征分类numeric_features = ['Age', 'S1', 'S2', 'S3', 'S4']

category_features = ['Sex']numeric_features = ['Age', 'S1', 'S2', 'S3', 'S4']

category_features = ['Sex']

读取数据CAD_data = pd.read_csv(dat_path)

X = CAD_data[numeric_features + category_features]

y = CAD_data['Results']

数据预处理,注意训练集和测试集的特征都需要预处理,因此可以考虑封装成函数方便调用def preprocessing(train, test):

# 独热编码处理分类变量

encoder = OneHotEncoder(sparse=False)

encoded_train = encoder.fit_transform(train[category_features])

encoded_test = encoder.transform(test[category_features])

# 归一化处理数值变量

scaler = MinMaxScaler()

scaled_train = scaler.fit_transform(train[numeric_features])

scaled_test = scaler.transform(test[numeric_features])

# 横向合并

train_new = np.hstack((encoded_train, scaled_train))

test_new = np.hstack((encoded_test, scaled_test))

# 返回数据

return train_new, test_new

分隔数据集并对特征预处理X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=3/10, random_state=10)

X_train_new, X_test_new = preprocessing(X_train, X_test)

最后构建新模型,训练并验证linear_model_new = LinearRegression()

linear_model_new.fit(X_train_new, y_train)

R2_new = linear_model_new.score(X_test_new, y_test)

print('优化线性模型的R2值为:{:.4f}'.format(R2_new))

我们看一下结果,并跟旧模型进行比对

结束语

其实这个结果并不出乎意料,样本量小也是特征预处理不能发挥出显著优化作用的一个原因。另外,针对模型优化可以再指出的一点是,如果特征较多时往往也不会全部纳入模型中拟合,也要考虑相关性做适当舍弃剪裁。例如本例中实际上去掉年龄Age特征后模型的R值上升会比直接预处理更明显!

当然,本实例的目的不是为了将模型优化的多好,而是希望通过这个简单的案例能够吸引更多的人学习Python,学习人工智能,并用于现实世界,产生新的思想并创造价值!

python回归建模_Python实现回归预测及模型优化相关推荐

  1. python 财务报表 建模_Python进行统计建模

    前言 大家好,在之前的文章中我们已经讲解了很多Python数据处理的方法比如读取数据.缺失值处理.数据降维等,也介绍了一些数据可视化的方法如Matplotlib.pyecharts等,那么在掌握了这些 ...

  2. python 回归 显著_Python数分:回归分析

    文章主要介绍两种常见的回归分析方法,以及其对应的Python实现操作. 我会从以下几个方面来介绍: 什么是回归分析 为什么使用回归分析 回归分析技术有哪些 使用Python实现回归分析 什么是回归分析 ...

  3. python数学建模(四)微分方程模型

    文章目录 (源)本编博客源代码下载 (一)用python求解微分方程 1.1 求微分方程(方程组)的符号解 1.2 数值解法 1.1.2 Lorenz 模型的混沌效应 (二)微分方程建模方法 2.1 ...

  4. python网格搜索法_Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据...

    介绍 在本教程中,我们将讨论一种非常强大的优化(或自动化)算法,即网格搜索算法.它最常用于机器学习模型中的超参数调整.我们将学习如何使用Python来实现它,以及如何将其应用到实际应用程序中,以了解它 ...

  5. python三维建模_Python在数学建模中的简单应用

    最近在学习数学建模,发现大多数人都在用MATLAB,但MATLAB不是一门正统的计算机编程语言,而且速度慢还收费,最不能忍受的就是MATLAB编辑器不支持代码自动补全.于是就想到了可爱的Python, ...

  6. python 财务报表 建模_python实现数据分析与建模

    前言 首先我们做数据分析,想要得出最科学,最真实的结论,必须要有好的数据.而实际上我们一般面对的的都是复杂,多变的数据,所以必须要有强大的数据处理能力,接下来,我从我们面临的最真实的情况,一步一步教会 ...

  7. python 生产消费者_python之生产者消费者模型实现详解

    代码及注释如下 #Auther Bob #--*--conding:utf-8 --*-- #生产者消费者模型,这里的例子是这样的,有一个厨师在做包子,有一个顾客在吃包子,有一个服务员在储存包子,这个 ...

  8. python数据建模_Python数据模型

    引言 像大多数人一样,我在对一直传统的面向过程语言C一知半解之后,走进了面向对象的世界,尽管对OOP一无所知,还好Python还保留有函数式编程,这使得我才不那么抵触,直到现在,习惯了面向对象之后,也 ...

  9. Scikit中的特征选择,XGboost进行回归预测,模型优化的实战

    前天偶然在一个网站上看到一个数据分析的比赛(sofasofa),自己虽然学习一些关于机器学习的内容,但是并没有在比赛中实践过,于是我带着一种好奇心参加了这次比赛. 赛题:足球运动员身价估计 比赛概述 ...

最新文章

  1. 2022-2028年中国地铁广告行业研究及前瞻分析报告
  2. linux中配置DHCP基本操作
  3. golang中小数除以大数为0的坑
  4. 什么是控制单元?—Vecloud微云
  5. JAVA查找事件侦听代码_Java自定义事件处理程序和侦听器
  6. 从一个实例,一窥docker进程管理
  7. 10 结构型模式-----装饰模式
  8. android glu,我可以使用glu与Android NDK
  9. ZUST-CCCC选拔赛(L1,L2部分题解)
  10. 基于深度学习的一款五子棋小游戏
  11. 实习分享 | 来康康字节小姐姐的经验
  12. php找100到1000之间的素数_php编程输出100以内的素数
  13. 机器学习十大算法实现代码汇总(python)----线性回归、逻辑回归、决策树、支持向量机、朴素贝叶斯、K邻近算法、K-均值算法、随机森林、降低维度算法、梯度增强算法
  14. WCDMA空口速率和Iub口速率的计算方法和限制
  15. 文件夹都具有只读属性
  16. 大鹏背景,大鹏为什么能邀请那么多明星?揭秘董成鹏的成名路
  17. 最实用大数据可视化分析工具
  18. 程序员去哪里找靠谱的兼职?(附项目库)
  19. 战地五多计算机登录账户,玩战地5电脑配置要求
  20. LK光流金字塔算法原理及C++实现

热门文章

  1. NewPhy.-揭秘优势种dominant species
  2. css做html5logo,用纯css实现的html5 logo标志
  3. R语言plotly可视化:使用PCA算法进行数据降维、使用plotly可视化随着主成分的增加解释的方差的量(plotting explained variance)
  4. R语言描述性统计分析:假设检验
  5. R使用pROC和ggplot2包绘制ROC曲线
  6. 贝叶斯岭回归(BayesianRidge)、自动关联决策回归、高斯过程、核函数、及高斯回归、高斯过程分类
  7. android8.0 go 机型,安卓8.0良心!还开发了安卓GO, 适配给低配手机,魅族很尴尬!...
  8. 使用rar备份mysql_用RAR备份源代码_用WSH备份数据库
  9. Python踩坑指南(第三季)
  10. 对Java基本数据类型的再思考