9. 机器学习汇总(数据、模型、流程、心血管疾病预测)

1. 数据

  • 表格类数据 tabular data
  • 互相独立,互不影响
  • 离散型数据的数字化:
    • zero index(状态很少时)
      • 0,1,2,…, N-1
    • one - hot(状态比较多时)
      • 1个特征变N个特征
      • [0, 0, 1, …, 0]
  • 连续型数据的数字化问题:
    • 直接使用原始数据即可
  • 预处理:
    • 中心化:
      • 以零为中心,正负都有
      • x - mu
    • 归一化:
      • 把数据变为[0, 1]
      • (x - _min) / (_max - _min)
    • 规范化:
      • 减去均值,除以标准差
      • (x - mu) / sigma

2. 模型

  • 分类:
    • KNN(K紧邻)

      • 简单,好理解
      • 规则+数据(非典型人工智能算法)
      • 惰性计算
      • 训练时很快
      • 预测时很慢
      • 准确率中等
    • 高斯朴素贝叶斯(GNB)

      • 本质是利用了条件概率/贝叶斯公式
      • 计算每个类别的概率,然后选择最大的
      • 前提假设:
        • 特征互相条件独立
        • 满足高斯分布
        • 使用概率密度函数的值代替概率
      • 训练时很快
      • 预测时很快
      • 准确率偏低
    • 决策树:

      • 利用信息论中的熵的内涵
      • 模型训练的过程,就是降低熵(混乱程度)的过程
      • 分类问题:
        • 信息熵(标准计算)
          • -[p1log(p1) + p2log(p2) + … pn*log(pn)]
        • 基尼系数(工程化简)
          • [p1*(1-p1) + p2*(1-p2) + … + pn*(1-pn)]
      • 回归问题:
        • 方差
      • 剪枝算法:
        • 样本越多,越容易构建出一棵很复杂的树!
        • 如果不加限制,决策树会一直分裂到底,容易过拟合,层数很深
        • 策略:限制最大深度;每次分裂的最小样本数等
        • 好处:算法可以很复杂,也可以很简单!!!
        • 这是集成学习的基础!!!
      • 训练时速度中等
      • 推理时速度较快
      • 解释性比较好,树的每一次判断都清晰可见
      • 可以对特征进行重要性排序
    • 支持向量机

      • 适合于:少样本、少特征!
      • 最强个体!
      • 把事儿办了 VS 把事儿办好
      • 低维空间分不开的数据,映射到高纬分开!
      • 训练时:很慢!
      • 推理时:很慢!
      • 准确率:很好!
    • 逻辑回归:

      • 属于深度学习!
      • 二分类算法!
      • 看上去非常二,实际上很重要!
      • 打分函数!
      • sigmoid概率模拟
    • 随机森林:

      • 集成学习!!!
      • base estimator:
        • 决策树
      • 随机:
        • 行级随机(对样本进行了随机采样)
        • 列级随机(最多使用了根下N的特征)
      • 森林:
        • 多棵决策树构成(默认:100棵)
      • Bagging + Voting 的融合体
      • 训练时,速度比较快!
      • 测试时,速度比较快!
      • 准确率:比较好!
    • 其它集成学习:

      • AdaBoost
      • GradientBoost
      • XGBoost
      • LightGBM
  • 回归:
    • KNN
    • 决策树
    • 线性回归
    • 支持向量机
    • 随机森林
    • 集成学习!!!
  • 聚类:
    • KMeans K均值算法
  • 降维:
    • PCA 主成分分析法

3. 流程

  1. 分析问题,搞定输入和输出;
    • 输入:哪些特征?如何数字化?
    • 输出:分类?回归?
  2. 根据输入和输出,构建数据集!
  3. 遴选一种算法,完成输入到输出的映射!
  4. 模型评估、部署、上线应用!

4. 代码(预测心血管疾病)

4.0 读入数据,数据规范化处理

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import numpy as np
import time# 读取数据
X=[]
y=[]
file_name='./心血管疾病数据集.csv'
with open(file = file_name,mode='r',encoding='utf8') as f:line_first = np.array(f.readline().strip().split(','))for line in f:  if line:line = f.readline().strip().split(',')X.append(line[:-1])y.append(line[-1])# 将数据转为numpy数组
X=np.array(X)
y=np.array(y)# 把所有数据都转为float类型
X=X.astype(float)
y=y.astype(float)
# 删掉第1列id
X=X[:,1:]# 切分数据
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)# 数据预处理(规范化)
_mean = X_train.mean(axis=0)
_std = X_train.std(axis=0)
X_train = (X_train-_mean)/(_std+1e-9)
X_test = (X_test-_mean)/(_std+1e-9)

4.1 KNN

"""测试1:KNN
"""
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
# 取一个时间戳
start_fit = time.time()
knn.fit(X=X_train, y=y_train)
# 取一个时间戳
start_predict = time.time()
y_pred = knn.predict(X=X_test)
# 取一个时间戳
stop_predict = time.time()
# 评估
acc = ( y_pred== y_test).mean()# 打印结果
print(f"""KNN: --> 训练耗时:{start_predict-start_fit} 秒;--> 推理耗时:{stop_predict-start_predict} 秒;--> 准确率:{acc} ;""")

KNN:
–> 训练耗时:0.04751253128051758 秒;
–> 推理耗时:1.3453574180603027 秒;
–> 准确率:0.6402857142857142 ;

4.2 高斯朴素贝叶斯

"""测试2:高斯朴素贝叶斯
"""
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
# 取一个时间戳
start_fit = time.time()
gnb.fit(X=X_train, y=y_train)
# 取一个时间戳
start_predict = time.time()
y_pred = gnb.predict(X=X_test)
# 取一个时间戳
stop_predict = time.time()
# 评估
acc = ( y_pred== y_test).mean()# 打印结果
print(f"""GNB: --> 训练耗时:{start_predict-start_fit} 秒;--> 推理耗时:{stop_predict-start_predict} 秒;--> 准确率:{acc} ;""")

GNB:
–> 训练耗时:0.009502649307250977 秒;
–> 推理耗时:0.0010018348693847656 秒;
–> 准确率:0.5931428571428572 ;

4.3 决策树

"""测试3:决策树
"""
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier()
# 取一个时间戳
start_fit = time.time()
dtc.fit(X=X_train, y=y_train)
# 取一个时间戳
start_predict = time.time()
y_pred = dtc.predict(X=X_test)
# 取一个时间戳
stop_predict = time.time()
# 评估
acc = ( y_pred==y_test).mean()# 打印结果
print(f"""DTC: --> 训练耗时:{start_predict-start_fit} 秒;--> 推理耗时:{stop_predict-start_predict} 秒;--> 准确率:{acc} ;""")

DTC:
–> 训练耗时:0.11947154998779297 秒;
–> 推理耗时:0.002510547637939453 秒;
–> 准确率:0.6367142857142857 ;

4.4 随机森林

"""测试4:随机森林
"""
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
# 取一个时间戳
start_fit = time.time()
rfc.fit(X=X_train, y=y_train)
# 取一个时间戳
start_predict = time.time()
y_pred = rfc.predict(X=X_test)
# 取一个时间戳
stop_predict = time.time()
# 评估
acc = ( y_pred==y_test).mean()# 打印结果
print(f"""RFC: --> 训练耗时:{start_predict-start_fit} 秒;--> 推理耗时:{stop_predict-start_predict} 秒;--> 准确率:{acc} ;""")

RFC:
–> 训练耗时:3.7813894748687744 秒;
–> 推理耗时:0.18322372436523438 秒;
–> 准确率:0.715 ;

4.5 支持向量机

"""测试5:支持向量机
"""
from sklearn.svm import SVC
svc = SVC()
# 取一个时间戳
start_fit = time.time()
svc.fit(X=X_train, y=y_train)
# 取一个时间戳
start_predict = time.time()
y_pred = svc.predict(X=X_test)
# 取一个时间戳
stop_predict = time.time()
# 评估
acc = ( y_pred==y_test).mean()# 打印结果
print(f"""SVC: --> 训练耗时:{start_predict-start_fit} 秒;--> 推理耗时:{stop_predict-start_predict} 秒;--> 准确率:{acc} ;""")

SVC:
–> 训练耗时:22.884344339370728 秒;
–> 推理耗时:10.314218997955322 秒;
–> 准确率:0.7188571428571429 ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14. Hibernate 一对多双向关联映射

1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程,你将了解到: 如何实现一对多关联映射; 如何实现双向一对多关联映射; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多&…

在Ubuntu 18.04上安装和使用Composer的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Composer 是一个流行的 PHP 依赖管理工具,主要用于简化项目依赖项的安装和更新。它会检查特定项目依赖的其他软件包&a…

深入理解Linux网络(八):内核如何发送网络包

深入理解Linux网络(八):内核如何发送网络包 一、总览二、网卡启动准备三、ACCEPT 创建新 SOCKET四、开始发送数据send 系统调⽤实现传输层处理传输层拷贝传输层发送 网络层发送原理邻居⼦系统网络设备子系统软中断调度igb网卡驱动发送发送完成…

git revert 回退 中间的一笔提交

git revert abcdef git如何回退中间一次提交 • Worktile社区

Python 实现PDF和TIFF图像之间的相互转换

PDF是数据文档管理领域常用格式之一,主要用于存储和共享包含文本、图像、表格、链接等的复杂文档。而TIFF(Tagged Image File Format)常见于图像处理领域,主要用于高质量的图像文件存储。 在实际应用中,我们可能有时需…

wefwefwe

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

在 ArkTS 中集成 C 语言模块来管理文件描述符

文章目录 前言ArkTS模块C语言模块C模块代码 总结 前言 在现代开发中,尤其是在处理文件操作时,使用文件描述符(fd)是一种常见的方法。ArkTS提供了一种强大的方式来与底层C代码交互,使我们能够利用C语言的性能优势来管理…

LeetCode-day24-2766. 重新放置石块

LeetCode-day24-2766. 重新放置石块 题目描述示例示例1:示例2: 思路代码 题目描述 给你一个下标从 0 开始的整数数组 nums ,表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo 。 在 moveFrom.leng…

dsa加训

refs: OI Wiki - OI Wiki (oi-wiki.org) 1. 枚举 POJ 2811 熄灯问题 refs : OpenJudge - 2811:熄灯问题 如果要枚举每个灯开或者不开的情况,总计2^30种情况,显然T。 不过我们可以发现:若第i行的某个灯亮了,那么有且仅有第i行和第…

巧用 API 接口,尽览京东商品详情

在电商的浩瀚世界里,京东无疑是一座丰富的宝库,而京东商品详情则是其中的璀璨明珠。对于开发者、数据分析师和电商从业者来说,能够巧妙地运用 API 接口获取京东商品详情,无疑是打开了一扇洞察电商奥秘的窗户。 一、京东商品详情的…

【算法与数据结构】并查集

并查集 合并和查询集合的数据结构,经常用于连通图,最小生成树 K r u s k a l Kruskal Kruskal算法,最近公共祖先( L C A LCA LCA​​) 查询的时间复杂度:小于O( l o g 2 n log_{2}n log2​n)近乎O(1) 【模板】并查集 题目描述…

Win10使用VS Code远程连接Ubuntu服务器时遇到SSH公钥错误的解决方案

在使用Windows 10上的Visual Studio Code(VS Code)远程连接Ubuntu 20.04服务器时,遇到了以下错误: 错误的原因 这个错误消息表明,SSH 客户端检测到远程主机的 ECDSA 公钥已更改。可能是由于以下原因之一&#xff1a…

组蛋白乳酸化 | 调控蛋白Writers、Erasers和Readers

组蛋白修饰的调控可以被归类为三类蛋白:Writers(写入者)、Erasers(擦除者)和Readers(读取者)。Writers是负责在组蛋白上添加修饰基团的蛋白,包括乙酰化、甲基化等修饰。Erasers则是负…

学习记录——day17 数据结构 队列 链式队列

队列介绍 1、队列也是操作受限的线性表:所有操作只能在端点处进行,其删除和插入必须在不同端进行 2、允许插入操作的一端称为队尾,允许删除操作的一端称为队头 3、特点:先进先出(FIFO) 4、分类: 顺序存储的栈称为顺序栈 链式存储的队列&a…

如何使用js 判断在pc打开还是手机

在JavaScript中,你可以通过检查浏览器的userAgent字符串来判断用户是在PC(桌面设备)上打开页面还是在手机上(移动设备)打开。不过,需要注意的是,userAgent字符串可以被用户或浏览器插件修改&…

IP数据报结构详解:从基础到进阶

目录 IP数据报的格式 IP数据报首部的固定部分 IP数据报首部的可变部分 实例分析:数据报的分片 生存时间(TTL)与协议 首部检验和 总结 在网络通信中,IP数据报是至关重要的基本单元。本文将带您深入了解IP数据报的格式及其各个…

【Python】使用抓包Fiddler软件,网络查询 遇到“您的连接不是私密连接”的问题的解决方法

使用Fiddler抓包软件很久,忽然发现网络使用有问题,一点开浏览器就会出现类似下面的页面: 检查了网络情况发现不是网络的问题,也排除了封号的可能。发现只要把抓包软件Fiddler关闭以后就没问题了,就知道问题是出在软件…

国产光电耦合器2024年的机遇与挑战

随着科技的飞速发展,2024年对于国产光电耦合器行业来说,无疑是充满机遇与挑战的一年。本文将深入探讨该行业在技术创新、市场竞争、5G时代、新兴应用领域和国际市场拓展方面的现状及未来前景。 技术创新的黄金期 物联网和人工智能技术的迅猛发展&#x…

Java之集合底层-数据结构

Java集合之数据结构 1 概述 数据结构是计算机科学中研究数据组织、存储和操作的一门学科。它涉及了如何组织和存储数据以及如何设计和实现不同的数据操作算法和技术。常见的据结构有线性数据结构(含数组、链表、栈和队列等),非线性数据结构…

医学多模态:多模态知识增强全幻灯病理基础模型

A Multimodal Knowledge-enhanced Whole-slide Pathology Foundation Model 目录 摘要介绍结果2.1 mSTAR概述2.2 病理幻灯片分类用于诊断和治疗mSTAR改善了幻灯片级诊断任务mSTAR改善了分子预测2.3 病理生存分析预测mSTAR 提高了癌症生存预测2.4 多模态能力mSTAR促进多模态融合…