Python-sklearn-diabetes项目实战

news2024/9/24 23:27:09

目录

1 下载数据集和预处理

1.1 加载/下载数据集

1.2 数据可视化

1.3 数据清洗

1.4 特征工程

1.5 构建特征集和标签集

1.6 拆分训练集和测试集

2 训练模型

2.1 选择算法和确定模型

2.2 训练拟合模型

3 评估并优化模型性能


本文以糖尿病数据集diabetes为基础进行线性回归训练:

1 下载数据集和预处理

1.1 加载/下载数据集

"""
@Title: 收集数据
@Time: 2024/3/11
@Author: Michael Jie

收集数据和预处理:
1、收集数据;
2、数据可视化;
3、数据清洗;
4、特征工程;
5、构建特征集和标签集(仅监督学习需要);
6、拆分训练集和测试集。
"""

import sklearn.datasets as ds
import pandas as pd

# 加载并返回糖尿病数据集(回归)
diabetes = ds.load_diabetes(
    # 若为True,返回(data, target)元组,而非Bunch对象
    return_X_y=False,
    # 若为True,以pandas DataFrame/Series形式返回数据集
    as_frame=False,
    # 若为True,返回归一化后的特征集
    scaled=False
)

# Bunch对象本质是一个字典
print(diabetes.keys())
"""
dict_keys([
    'data',  # 特征集 
    'target',  # 标签集
    'frame',  # 包含特征值和标签的数组,当as_frame=True时存在
    'DESCR',  # 数据集描述
    'feature_names',  # 特征集列名
    'data_filename',  # 内存中的特征集文件名
    'target_filename',  # 内存中的标签集文件名
    'data_module'
])
"""

# 特征集
data = diabetes.data
print(type(data), data.shape)
"""
<class 'numpy.ndarray'> 
(442, 10)
"""
feature_names = diabetes.feature_names
print(feature_names, type(feature_names))
"""
['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
<class 'list'>
"""

# 标签集
target = diabetes.target
print(type(target), target.shape)
"""
<class 'numpy.ndarray'> 
(442,)
"""

# 数据集描述
print(diabetes.DESCR)
"""
Diabetes dataset
----------------

Ten baseline variables, age, sex, body mass index, average blood
pressure, and six blood serum measurements were obtained for each of n =
442 diabetes patients, as well as the response of interest, a
quantitative measure of disease progression one year after baseline.

**Data Set Characteristics:**

:Number of Instances: 442

:Number of Attributes: First 10 columns are numeric predictive values

:Target: Column 11 is a quantitative measure of disease progression one year after baseline

:Attribute Information:
    - age     age in years
    - sex
    - bmi     body mass index
    - bp      average blood pressure
    - s1      tc, total serum cholesterol
    - s2      ldl, low-density lipoproteins
    - s3      hdl, high-density lipoproteins
    - s4      tch, total cholesterol / HDL
    - s5      ltg, possibly log of serum triglycerides level
    - s6      glu, blood sugar level

Note: Each of these 10 feature variables have been mean centered and scaled by the standard deviation times the square root of `n_samples` (i.e. the sum of squares of each column totals 1).

Source URL:
https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html

For more information see:
Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani (2004) "Least Angle Regression," Annals of Statistics (with discussion), 407-499.
(https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)
"""

# 下载数据集
data_csv = pd.DataFrame(data=data, columns=feature_names)
target_csv = pd.DataFrame(data=target, columns=['target'])
diabetes_csv = pd.concat([data_csv, target_csv], axis=1)
diabetes_csv.to_csv(r'diabetes_datasets.csv', index=False)

1.2 数据可视化

"""
@Title: 数据可视化
@Time: 2024/3/11
@Author: Michael Jie
"""

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
csv = pd.read_csv(r'diabetes_datasets.csv')
print(csv.shape)  # (442, 11)

# 可视化数据
plt.figure(figsize=(19.2, 10.8))
for i in range(csv.shape[1] - 1):
    plt.subplot(2, 5, i + 1).scatter(csv[csv.columns[i]], csv["target"])

# 保存图片
plt.savefig(r'diabetes_datasets.png')
# plt.show()

1.3 数据清洗

"""
@Title: 数据清洗
@Time: 2024/3/11
@Author: Michael Jie
"""

import pandas as pd

"""
1、处理缺失数据:剔除残缺数据,也可以用平均值、随机值或者0来补值;
2、处理重复数据:删除完全相同的重复数据处理;
3、处理错误数据:处理逻辑错误数据;
4、处理不可用数据:处理格式错误数据。
"""

# 读取数据
csv = pd.read_csv(r'diabetes_datasets.csv')

# 统计NaN出现的次数
print(csv.isna().sum())
"""
age       0
sex       0
bmi       0
bp        0
s1        0
s2        0
s3        0
s4        0
s5        0
s6        0
target    0
dtype: int64
"""

1.4 特征工程

"""
@Title: 特征工程
@Time: 2024/3/11
@Author: Michael Jie
"""

import numpy as np
import sklearn.datasets as ds


# 标准化
def z_score_normalization(x, axis=0):
    x = np.array(x)
    x = (x - np.mean(x, axis=axis)) / np.std(x, axis=axis)
    return x


# 若为True,返回归一化后的特征集
diabetes_pre = ds.load_diabetes(scaled=True)
print(diabetes_pre.data)

# 手动标准化特征集
diabetes = ds.load_diabetes(scaled=False)
print(z_score_normalization(diabetes.data))

1.5 构建特征集和标签集

无。

1.6 拆分训练集和测试集

"""
@Title: 
@Time: 2024/3/11
@Author: Michael Jie
"""

import sklearn.datasets as ds
from sklearn.model_selection import train_test_split

# 加载数据
diabetes = ds.load_diabetes(scaled=False)

# 将数据集进行80%训练集和20%的测试集的分割
x_train, x_test, y_train, y_test = train_test_split(
    diabetes.data, diabetes.target, test_size=0.2, random_state=0
)
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)
"""
(353, 10) (89, 10) (353,) (89,)
"""

2 训练模型

2.1 选择算法和确定模型

# 创建基本线性回归类
linear = LinearRegression(
    # 是否计算截距
    fit_intercept=True,
    # 是否拷贝特征集
    copy_X=True,
)

# 创建正则线性回归类
ridge = Ridge(
    # 学习率
    alpha=1.0,
    # 是否计算截距
    fit_intercept=True,
    # 是否拷贝特征集
    copy_X=True,
    # 最大训练轮次
    max_iter=None,
    # 最小损失差
    tol=1e-4,
)

2.2 训练拟合模型

"""
@Title: 训练模型和评估
@Time: 2024/3/11
@Author: Michael Jie
"""

import sklearn.datasets as ds
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.model_selection import train_test_split

# 加载数据
diabetes = ds.load_diabetes(scaled=True)

# 将数据集进行80%的训练集和20%的测试集的分割
x_train, x_test, y_train, y_test = train_test_split(
    diabetes.data, diabetes.target, test_size=0.2, random_state=0
)

# 创建基本线性回归类
linear = LinearRegression()
# 训练
linear.fit(x_train, y_train)
print(linear.coef_, linear.intercept_)
"""
[ -35.55025079 -243.16508959  562.76234744  305.46348218 -662.70290089
  324.20738537   24.74879489  170.3249615   731.63743545   43.0309307 ] 152.5380470138517
"""

# 创建正则线性回归类
ridge = Ridge()
# 训练
ridge.fit(x_train, y_train)
print(ridge.coef_, ridge.intercept_)
"""
[  21.34794489  -72.97401935  301.36593604  177.49036347    2.82093648
  -35.27784862 -155.52090285  118.33395129  257.37783937  102.22540041] 151.9441509473086
"""

3 评估并优化模型性能

# 创建基本线性回归类
linear = LinearRegression()
linear.fit(x_train, y_train)
# 评估模型,结果在0-1之间,越大证明模型越拟合数据
print(linear.score(x_test, y_test))
"""
0.33223321731061806
"""

# 创建正则线性回归类
ridge = Ridge()
ridge.fit(x_train, y_train)
# 评估模型
print(ridge.score(x_test, y_test))
"""
0.3409800318493461
"""

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

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

相关文章

Spring Cloud Gateway如何实现熔断

Spring Cloud Gateway熔断集成 熔断应用&#xff1a; 金融市场中的熔断机制&#xff1a;在金融交易系统中&#xff0c;熔断机制&#xff08;Circuit Breaker&#xff09;是一种市场保护措施&#xff0c;旨在预防市场剧烈波动时可能导致的系统性风险。当某个基准指数&#xff08…

【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程

上篇文章我们介绍了Nacos集群的搭建方法及步骤&#xff0c;下面我们来看一下Nacos集群的工作原理&#xff0c;一共有两部分&#xff1a;Leader节点选举及各节点数据同步。 1、Nacos集群中Leader节点是如何产生的 Nacos集群采用了Raft算法实现。它是一种比较简单的选举算法&am…

【javaWeb】在webapp中手动发布一个应用

标题 &#x1f432;一、为什么要在webapp中手动发布一个应用&#x1f389;二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 &#x1f432;一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

Abaqus三维梯度泰森多边形插件:Voronoi FGM 3D(Mesh)- AbyssFish

插件介绍 Voronoi FGM 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus软件内生成梯度分布的三维泰森多边形长方体模型。插件可用于梯度功能材料(Functionally Gradient Materials)、梯度纳米金属材料、梯度金属结构等梯度晶体模型的建立。模型基于背景网格实现&#xff0c;通过单…

YOLO_项目环境配置

YOLOv5官方项目地址 https://github.com/ultralytics/yolov5 下载 5.0和1.0源码 5.0 master-Tags-v5.0 Code-Download.ZIP 切换到1.0下载 解压缩提取 打开V5.0 使用Pycharm打开V5.0的文件夹 环境配置 参考 http://t.csdnimg.cn/Zdfh2 http://t.csdnimg.cn/Nqkwr 然后在Pyc…

学习JAVA的二十二天(基础)

目录 网络编程 三要素&#xff1a; IP InetAddress类 端口号 协议 UDP协议 TCP协议 前言&#xff1a;学习JAVA的第二十一天&#xff08;基础&#xff09;-CSDN博客 网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序,进行的数据传输。 三要素&#xff1a;…

Qt篇——QChartView获取鼠标停留位置的数值

需求&#xff1a;鼠标停留在QChartView上时&#xff0c;想要计算停留位置的数值。 一开始的方法是想要通过鼠标移动事件计算鼠标在QChartView上的坐标&#xff0c;在换算成数值&#xff0c;后来发现QChartView中除了图表数据&#xff0c;还有坐标轴与坐标轴数值标签占了高度&a…

Python数据分析-Matplotlib1

一、折线图的绘制 1.数据分析流程 2.运用Matplot绘制折线图 #encodingutf-8 import random from matplotlib import pyplot as plt #绘图工具库 from matplotlib import font_manager #解决中文显示问题 from cProfile import label #设置字体方式 my_font font_manager.Fon…

个人简历主页搭建系列-02:github 仓库作为联系方式

这篇文章暂时没有开始正式搭建网站。首先是最重要的注意事项&#xff1a;隐私。 真实姓名如果大家自己不介意的话其实我觉得还好&#xff0c;现在在互联网上想扒个姓名挺简单的&#xff0c;而且很多人都实名上网hh&#xff08;比如我的几位田径队学弟笑&#xff09;。 电话&a…

怎样基于“用户”思维让内容营销更有效

当下互联网流量见顶&#xff0c;内容已经成为互联网竞争新的制高点&#xff0c;可以说在数字化驱动的新时代下&#xff0c;“内容为王”仍然是真理。然后信息泛滥的时代下&#xff0c;如何让内容营销脱颖而出呢&#xff1f;媒介盒子认为“用户思维”是关键&#xff0c;今天就和…

2024.3.14jsp

一、实验目的 1、安装配置JSP运行环境 2、设置web服务目录&#xff0c;修改TomCAT服务器的端口号、访问web服务目录下的jsp页面。 二、实验项目内容&#xff08;实验题目&#xff09; 1、编写两个简单的JSP页面&#xff1b;参考第一章上机实验1、2 &#xff08;1&#xff09…

Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

Nacos是服务发现组件和配置服务器 作为服务发现注册组件Nacos Server 搭建Nacos Server 下载、启动 访问nacos,默认 用户/密码 nacos/nacos 将应用注册到nacos 加依赖 在SpringCloud子项目中&#xff0c;Feign是属于OpenFeign&#xff0c;Sentinel、Nacos是属于alibaba的&…

搭建个人智能家居 3 -第一个设备“点灯”

搭建个人智能家居 3 -第一个外设“点灯” 前言ESPHome点灯 HomeAssistant 前言 前面我们已经完成了搭建这个智能家居所需要的环境HomeAssistant和ESPHome&#xff0c;今天我们开始在这个智能家居中添加我们的第一个设备&#xff08;一颗LED灯&#xff09;&#xff0c;如果环境…

Mysql---库表操作

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.Mysql数据库简介 MySQL是一种关系型数据库管理系统&#xff0c;是最流行的开源数据库之一。它是由瑞典MySQL AB公司开发的&#xff0c;后来被Sun Microsystems收购&#xff0c;之后又被Oracl…

数码管的动态显示(三)

1.原理 data_reg寄存&#xff0c;只寄存符号位和数据位不包含小数点位。 动态数码管每个显示1ms&#xff0c;所以计数到5*10^4-1 为了将sel和seg同步&#xff0c;把sel打了一拍。 6位都使用到了可以这么计算&#xff0c;6位都显示的是数据。或者最高位显示的是小数点&#xff…

微软远程桌面RD Client:连接与管理的新境界

微软远程桌面RD Client&#xff1a;连接与管理的新境界 在数字化日益深入的今天&#xff0c;远程工作与管理已成为许多企业和个人的首选。微软远程桌面RD Client作为一款功能强大的远程连接工具&#xff0c;凭借其出色的性能和便捷的操作&#xff0c;受到了广泛的关注和好评。…

C# EPPlus导出dataset----Excel2绘制图像

一、生成折线图方法 /// <summary> ///生成折线图 /// </summary> /// <param name="worksheet">sheet页数据 </param> /// <param name="colcount">总列数</param> /// &l…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法&#xff0c;其…

PGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS多路视频融…

x6.js 从流程图组件库中拖拽组件到画布dnd使用

上一篇已经了解到了x6.js常用功能以及使用方法。但我们使用流程图的时候还少不了一个非常重要的功能那就是拖拽组件库里的组件进来。如下图&#xff1a; 首先是布局这块&#xff0c;拖拽组件库的视图中布局无需我们去写&#xff0c;我们只需把界面搭建好。 添加组件库 1.搭建布…