Python数据分析实验四:数据分析综合应用开发

目录

    • 一、实验目的与要求
    • 二、主要实验过程
      • 1、加载数据集
      • 2、数据预处理
      • 3、划分数据集
      • 4、创建模型估计器
      • 5、模型拟合
      • 6、模型性能评估
    • 三、主要程序清单和运行结果
    • 四、实验体会


一、实验目的与要求

1、目的:

  综合运用所学知识,选取有实际背景的应用问题进行数据分析方案的设计与实现。要求明确目标和应用需求,涵盖数据预处理、建模分析、模型评价和结果展示等处理阶段,完成整个分析流程。

2、要求:

(1)应用Scikit-Learn库中的逻辑回归、SVM和kNN算法对Scikit-Learn自带的乳腺癌(from sklearn.datasets import load_breast_cancer)数据集进行分类,并分别评估每种算法的分类性能。
(2)为了进一步提升算法的分类性能,能否尝试使用网格搜索和交叉验证找出每种算法较优的超参数。

二、主要实验过程

1、加载数据集

from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()
cancer.keys()
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])

将数据集转换为DataFram:

import pandas as pd
cancer_data=pd.DataFrame(cancer.data,columns=cancer.feature_names)
cancer_data['target']=cancer.target_names[cancer.target]
cancer_data.head(3).append(cancer_data.tail(3))
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.300100.147100.24190.07871...17.33184.602019.00.162200.665600.71190.26540.46010.11890malignant
120.5717.77132.901326.00.084740.078640.086900.070170.18120.05667...23.41158.801956.00.123800.186600.24160.18600.27500.08902malignant
219.6921.25130.001203.00.109600.159900.197400.127900.20690.05999...25.53152.501709.00.144400.424500.45040.24300.36130.08758malignant
56616.6028.08108.30858.10.084550.102300.092510.053020.15900.05648...34.12126.701124.00.113900.309400.34030.14180.22180.07820malignant
56720.6029.33140.101265.00.117800.277000.351400.152000.23970.07016...39.42184.601821.00.165000.868100.93870.26500.40870.12400malignant
5687.7624.5447.92181.00.052630.043620.000000.000000.15870.05884...30.3759.16268.60.089960.064440.00000.00000.28710.07039benign

6 rows × 31 columns

2、数据预处理

进行数据标准化:

from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target

3、划分数据集

将数据集划分为训练集和测试集:

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) 

4、创建模型估计器

(1)创建逻辑回归模型估计器:

#创建逻辑回归模型估计器
from sklearn.linear_model import LogisticRegression
lgr=LogisticRegression()

(2)创建SVM算法模型估计器:

#创建SVM算法模型估计器
from sklearn.svm import SVC
svc=SVC()

(3)创建kNN算法模型估计器:

#创建kNN算法模型估计器
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier()

5、模型拟合

用训练集训练模型估计器estimator:

#训练逻辑回归模型估计器
lgr.fit(X_train,y_train)
#训练SVM算法模型估计器
svc.fit(X_train,y_train)
#训练kNN算法模型估计器
knn.fit(X_train,y_train)

6、模型性能评估

(1)逻辑回归模型性能评估:

#用模型估计器对测试集数据做预测
y_pred=lgr.predict(X_test)

#对模型估计器的学习效果进行评价
print("测试集的分类准确率为:",lgr.score(X_test,y_test))

(2)SVM算法模型性能评估:

#用模型估计器对测试集数据做预测
y_pred=svc.predict(X_test)

#对模型估计器的学习效果进行评价
print("测试集的分类准确率为:",svc.score(X_test,y_test))

(3)kNN算法模型性能评估:

#用模型估计器对测试集数据做预测
y_pred=knn.predict(X_test)

#对模型估计器的学习效果进行评价
print("测试集的分类准确率为:",knn.score(X_test,y_test))

三、主要程序清单和运行结果

1、逻辑回归用于分类

#加载数据集
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()

#对数据集进行预处理,实现数据标准化
from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target

#将数据集划分为训练集和测试集(要求测试集占25%,随机状态random state设置为33)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) 

#创建模型估计器estimator
from sklearn.linear_model import LogisticRegression
lgr=LogisticRegression()

#用训练集训练模型估计器estimator
lgr.fit(X_train,y_train)

#用模型估计器对测试集数据做预测
y_pred=lgr.predict(X_test)

#对模型估计器的学习效果进行评价
#最简单的评估方法:就是调用估计器的score(),该方法的两个参数要求是测试集的特征矩阵和标签向量
print("测试集的分类准确率为:",lgr.score(X_test,y_test))
from sklearn import metrics
#对于多分类问题,还可以使用metrics子包中的classification_report
print(metrics.classification_report(y_test,y_pred,target_names=cancer.target_names)) 

#网格搜索与交叉验证相结合的逻辑回归算法分类:
from sklearn.model_selection import GridSearchCV,KFold
params_lgr={'C':[0.01,0.1,1,10,100],'max_iter':[100,200,300],'solver':['liblinear','lbfgs']}
kf=KFold(n_splits=5,shuffle=False)

grid_search_lgr=GridSearchCV(lgr,params_lgr,cv=kf)
grid_search_lgr.fit(X_train,y_train)
grid_search_y_pred=grid_search_lgr.predict(X_test)
print("Accuracy:",grid_search_lgr.score(X_test,y_test))
print("best params:",grid_search_lgr.best_params_)

在这里插入图片描述

2、支持向量用于分类

#加载数据集
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()

#对数据集进行预处理,实现数据标准化
from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target

#将数据集划分为训练集和测试集(要求测试集占25%,随机状态random state设置为33)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) 

#创建模型估计器estimator
from sklearn.svm import SVC
svc=SVC()

#用训练集训练模型估计器estimator
svc.fit(X_train,y_train)

#用模型估计器对测试集数据做预测
y_pred=svc.predict(X_test)

#对模型估计器的学习效果进行评价
#最简单的评估方法:就是调用估计器的score(),该方法的两个参数要求是测试集的特征矩阵和标签向量
print("测试集的分类准确率为:",svc.score(X_test,y_test))
from sklearn import metrics
#对于多分类问题,还可以使用metrics子包中的classification_report
print(metrics.classification_report(y_test,y_pred,target_names=cancer.target_names))

#网格搜索与交叉验证相结合的SVM算法分类:
from sklearn.model_selection import GridSearchCV,KFold
params_svc={'C':[0.1,1,10],'gamma':[0.1,1,10],'kernel':['linear','rbf']}
kf=KFold(n_splits=5,shuffle=False)
grid_search_svc=GridSearchCV(svc,params_svc,cv=kf)
grid_search_svc.fit(X_train,y_train)
grid_search_y_pred=grid_search_svc.predict(X_test)
print("Accuracy:",grid_search_svc.score(X_test,y_test))
print("best params:",grid_search_svc.best_params_)

在这里插入图片描述

3、kNN用于分类

#加载数据集
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()

#对数据集进行预处理,实现数据标准化
from sklearn.preprocessing import StandardScaler
X=StandardScaler().fit_transform(cancer.data)
y=cancer.target

#将数据集划分为训练集和测试集(要求测试集占25%,随机状态random state设置为33)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33) 

#创建模型估计器estimator
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier()

#用训练集训练模型估计器estimator
knn.fit(X_train,y_train)

#用模型估计器对测试集数据做预测
y_pred=knn.predict(X_test)

#对模型估计器的学习效果进行评价
#最简单的评估方法:就是调用估计器的score(),该方法的两个参数要求是测试集的特征矩阵和标签向量
print("测试集的分类准确率为:",knn.score(X_test,y_test))
from sklearn import metrics
#对于多分类问题,还可以使用metrics子包中的classification_report
print(metrics.classification_report(y_test,y_pred,target_names=cancer.target_names))

#网格搜索与交叉验证相结合的kNN算法分类:
from sklearn.model_selection import GridSearchCV,KFold
params_knn={'algorithm':['auto','ball_tree','kd_tree','brute'],'n_neighbors':range(3,10,1),'weights':['uniform','distance']}
kf=KFold(n_splits=5,shuffle=False)
grid_search_knn=GridSearchCV(knn,params_knn,cv=kf)
grid_search_knn.fit(X_train,y_train)
grid_search_y_pred=grid_search_knn.predict(X_test)
print("Accuracy:",grid_search_knn.score(X_test,y_test))
print("best params:",grid_search_knn.best_params_)

在这里插入图片描述

四、实验体会

  在本次实验中,我使用了Scikit-Learn库中的逻辑回归、支持向量机(SVM)和k最近邻(kNN)算法对乳腺癌数据集进行分类,并对每种算法的分类性能进行了评估。随后,我尝试使用网格搜索和交叉验证来找出每种算法的较优超参数,以进一步提升其分类性能。
  首先,我加载了乳腺癌数据集,并将其划分为训练集和测试集。然后,我分别使用逻辑回归、SVM和kNN算法进行训练,并在测试集上进行评估。评估指标包括准确率、精确率、召回率和F1-score等。通过这些指标,我能够了解每种算法在乳腺癌数据集上的分类性能。
  接着,我尝试使用网格搜索(Grid Search)和交叉验证(Cross Validation)来找出每种算法的较优超参数。网格搜索是一种通过在指定的超参数空间中搜索最佳参数组合来优化模型的方法。而交叉验证则是一种评估模型性能和泛化能力的方法,它将数据集分成多个子集,在每个子集上轮流进行训练和测试,从而得到更稳健的性能评估结果。
  在进行网格搜索和交叉验证时,我根据每种算法的参数范围设置了不同的参数组合,并使用交叉验证来评估每种参数组合的性能。最终,我选择了在交叉验证中性能最优的参数组合作为最终的超参数,并将其用于重新训练模型。
  通过这次实验,我学到了如何使用Scikit-Learn库中的机器学习算法进行分类任务,并了解了如何通过网格搜索和交叉验证来优化算法的超参数,提升其分类性能。同时,我也意识到了在实际应用中,选择合适的算法和调优超参数对于获得良好的分类效果至关重要。这次实验为我提供了宝贵的实践经验,对我的机器学习学习之旅有着重要的意义。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8_pose训练流程-原理解析[关键点检测理论篇]

本篇将介绍一下YOLOv8关键点检测网络的训练流程,同样在看此篇文章之前先去看一下预测流程[YOLOv8_pose预测流程-原理解析[关键点检测理论篇],还有目标检测任务的训练流程YOLOv8训练流程-原理解析[目标检测理论篇] ,这两篇都是前置课程,下图是YOLOv8实例分割的网络结构图。 …

C语言笔记22 •结构体•

C语言结构体 1.结构体类型的声明 struct Stu { char name[ 20 ]; // 名字 int age; // 年龄 char sex[ 5 ]; // 性别 char id[ 20 ]; // 学号 }; 2.结构体变量的创建和初始化 #include <stdio.h>// 定义一个结构体类型 Point struct Point {int x;int y; };i…

pikachu-Unsafe Filedownload

任意点击一个图片进行下载&#xff0c;发现下载的url。 http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filenamekb.png 构造payload&#xff1a; 即可下载 当前页面的源码&#xff0c;可以进行路径穿越来下载一些重要的配置文件来获取信息。 http://127.0.…

【PostgreSQL001】比较开发生产2个数据库结构方法

1.一直以来想写下基于PostgreSQL的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下PostgreSQL数据库相关知识体系。 3.欢迎批评指正&#xff0c;欢迎关…

【Mac】MWeb Pro(好用的markdown编辑器) v4.5.9中文版安装教程

软件介绍 MWeb Pro for Mac是一款Mac上的Markdown编辑器软件&#xff0c;它支持实时预览&#xff0c;语法高亮&#xff0c;自动保存和备份等功能&#xff0c;并且有多种主题和样式可供选择。此外&#xff0c;MWeb还支持多种导出格式&#xff0c;包括HTML、PDF、Word、ePub等&a…

虚拟机启动Operating System not found找不到操作系统

错误信息 PEX-E51 No SHCP or proxyDHCP offers were received. PXE-M0F: Exiting Intel PXE ROM. Operating System not found解决方法1 到服务里面检查跟vmware相关的服务是否已经全部启动 如果服务怎么都无法启动&#xff0c;最简单的办法还是重装vmware 解决方法2 &#…

数据插值之朗格朗日插值(一)

目录 一、引言 二、代码实现 2.1 Lagrange插值求插值多项式&#xff1a; 代码解析&#xff1a; 1.vpa解释 2.ploy&#xff08;x&#xff09;解释: 3.conv&#xff08;&#xff09;解释 4.poly2sym()解释 2.2 Lagrange插值求新样本值和误差估计&#xff1a; 代码解析&…

容器化:ES和Kibana

1 缘起 最近在学习使用ES&#xff0c; 为了找一个功能强大的可视化工具&#xff0c;之前使用了ES-Head&#xff0c;可以满足学习需求。 闲暇时间又折腾了另一个工具Kibana&#xff0c; 分享如下。 Kibana优点&#xff1a; 用户友好性&#xff1a;Kibana提供直观易用的用户界面…

项目思考-编辑器

1、文本生成编辑器 2、图片合成编辑器&#xff08;未完待续&#xff09; 3、文字和图像版本的技术要点&#xff0c;区别&#xff08;未完待续&#xff09; 4、编辑器的人员配置考虑&#xff0c;技术难点分析&#xff08;未完待续&#xff09; 1、文本生成编辑器

【Python】 掌握 Flask 请求数据获取的艺术

基本原理 在Web开发中&#xff0c;Flask是一个用Python编写的轻量级Web应用框架。它被广泛用于快速开发简单的Web应用。当用户通过浏览器或其他客户端向服务器发送请求时&#xff0c;Flask需要能够接收和解析这些请求中的数据。这些数据可以是GET请求的查询字符串、POST请求的…

收集 VSCode 常用快捷键

快速复制行 Shift Alt ↑/↓ 都是往下复制行&#xff0c;区别是&#xff1a;按↓复制时光标会跟着向下移动&#xff0c;按↑复制时光标不移动。 向上/向下移动一行 Alt ↑/↓ 删除整行 Ctrl Shift KCtrl x 剪切快捷键在VSCode 可以直接删除一行 垂直编辑 Ctrl…

用于时间序列概率预测的蒙特卡洛模拟

大家好&#xff0c;蒙特卡洛模拟是一种广泛应用于各个领域的计算技术&#xff0c;它通过从概率分布中随机抽取大量样本&#xff0c;并对结果进行统计分析&#xff0c;从而模拟复杂系统的行为。这种技术具有很强的适用性&#xff0c;在金融建模、工程设计、物理模拟、运筹优化以…

HACL-Net:基于MRI的胎盘植入谱诊断的分层注意力和对比学习网络

文章目录 HACL-Net: Hierarchical Attention and Contrastive Learning Network for MRI-Based Placenta Accreta Spectrum Diagnosis摘要方法实验结果 HACL-Net: Hierarchical Attention and Contrastive Learning Network for MRI-Based Placenta Accreta Spectrum Diagnosis…

Linux驱动设备导论(1)

最近本人在学习Linux驱动&#xff0c;本系列教程是本人在一边学习&#xff0c;一边总结的系列教程&#xff0c;希望能够给很多刚学驱动小伙伴一些总结。 1.Linux设备分类 驱动针对的对象是存储器和外设&#xff0c;不是针对CPU&#xff0c;可以分为以下三大类&#xff1a; 1.…

01-Linux【准备篇】

一、学Linux的作用&#xff1f; 1.Linux下开发(部署)软件项目 2.Linux运维 二、Linux的强与弱 1.薄弱 个人桌面领域的应用 此领域是传统Linux应用薄弱的环节&#xff0c;近些年随着Ubuntu、fedora等优秀桌面环境的兴起&#xff0c;Linux在个人桌面领域的占有率在慢慢提高…

[国产大模型简单使用介绍] 开源与免费API

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 随着大模型技术蓬勃发展和开源社区越来越活跃,国内的大模型也如雨后春笋一般.这时,一些就会问了,有了llama3,Mistral还有Gemma等等,国外大厂接连发力,一些开源社区也会有一些不错的模型,国内怎么比?对一个人使用,oll…

Debezium+Kafka:Oracle 11g 数据实时同步至 DolphinDB 解决方案

随着越来越多用户使用 DolphinDB&#xff0c;各式各样的应用场景对 DolphinDB 的数据接入提出了不同的要求。部分用户需要将 Oracle 11g 的数据实时同步到 DolphinDB 中来&#xff0c;以满足在 DolphinDB 中实时使用数据的需求。本篇教程将介绍使用 Debezium 来实时捕获和发布 …

03_前端三大件CSS

文章目录 CSS用于页面元素美化1.CSS引入1.1style方式1.2写入head中&#xff0c;通过写style然后进行标签选择器加载样式1.3外部样式表 2.CSS样式选择器2.1 元素选择器2.2 id选择器2.3 class选择器 3.CSS布局相关3.1 CSS浮动背景&#xff1a;先设计一些盒子因此&#xff0c;引出…

【Go专家编程——内存管理——垃圾回收】

垃圾回收 所谓的垃圾就上不在需要的内存块&#xff0c;垃圾如果不清理&#xff0c;这些内存块就没有办法再次被分配使用。在不支持垃圾回收的编程语言中&#xff0c;这些垃圾内存就上泄露的内存。 1. 垃圾回收算法 常见的垃圾回收算法有3种 引用计数&#xff1a;对每个对象…

Vue学习笔记3——事件处理

事件处理 1、事件处理器&#xff08;1&#xff09;内联事件处理器&#xff08;2&#xff09;方法事件处理器 2、事件参数3、事件修饰符 1、事件处理器 我们可以使用v-on 指令(简写为)来监听DOM事件&#xff0c;并在事件触发时执行对应的JavaScript。 用法: v-on:click"me…