当前位置: 首页 > news >正文

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 ;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 编程类精品GPTs
  • 05 循环神经网络
  • Webpack 5 Tree Shaking与Module Federation
  • 【管控业财一体化】
  • k8s核心知识总结
  • 构造函数的详解和new操作符
  • 项目架构知识点总结
  • 计算机网络(四)数字签名和CA认证
  • C#使用Clipper2进行多边形合并、相交、相减、异或的示例
  • 鸿蒙笔记--存储
  • Matplotlib : Python 的绘图库
  • 华清数据结构day5 24-7-22
  • 派可数据 助力制造企业数字化生产管理新能力提升
  • 每天五分钟深度学习:向量化方式完成逻辑回归m个样本的前向传播
  • Spark 解析嵌套的 JSON 文件
  • JavaScript-如何实现克隆(clone)函数
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 345-反转字符串中的元音字母
  • CentOS从零开始部署Nodejs项目
  • CSS 提示工具(Tooltip)
  • echarts花样作死的坑
  • java取消线程实例
  • PAT A1050
  • spark本地环境的搭建到运行第一个spark程序
  • SpiderData 2019年2月25日 DApp数据排行榜
  • vuex 笔记整理
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 第十八天-企业应用架构模式-基本模式
  • - 概述 - 《设计模式(极简c++版)》
  • 给github项目添加CI badge
  • 开发基于以太坊智能合约的DApp
  • 力扣(LeetCode)357
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 我建了一个叫Hello World的项目
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Nginx实现动静分离
  • 容器镜像
  • # Java NIO(一)FileChannel
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #if等命令的学习
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (10)STL算法之搜索(二) 二分查找
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (第一天)包装对象、作用域、创建对象
  • (二十四)Flask之flask-session组件
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十)Flink Table API 和 SQL 基本概念
  • (十五)使用Nexus创建Maven私服
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径