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


一、实验目的与要求

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库中的机器学习算法进行分类任务,并了解了如何通过网格搜索和交叉验证来优化算法的超参数,提升其分类性能。同时,我也意识到了在实际应用中,选择合适的算法和调优超参数对于获得良好的分类效果至关重要。这次实验为我提供了宝贵的实践经验,对我的机器学习学习之旅有着重要的意义。

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Python数据分析与应用是一本介绍如何使用Python进行数据分析和可视化的书籍。它从数据获取开始,介绍了如何使用Python进行数据清洗、数据处理、数据分析和数据可视化。书中涵盖了Python中常用的数据分析库,如NumPy、Pandas、Matplotlib和Seaborn等。通过本书的学习,读者可以了解如何使用Python进行数据分析和可视化,掌握数据分析的基本方法和技巧,提高数据分析的效率和准确性。 ### 回答2: Python数据分析与应用:从数据获取到可视化,是一门介绍使用Python进行数据分析的课程。这门课程主要涵盖下列内容: 1. 数据获取:数据分析的首要步骤是获取数据。这门课程介绍了如何使用Python获取数据的方法,包括使用Web API、爬虫、数据库等方式。 2. 数据处理:获取到数据后,需要对数据进行清洗、转换、筛选等处理,以便于后续分析。Python有丰富的数据处理工具,比如pandas和numpy等,这门课程将介绍它们的使用方法。 3. 数据分析:本门课程将介绍如何使用Python进行数据分析,包括统计分析、机器学习、深度学习等,以及常见的数据分析场景。 4. 数据可视化:数据分析的结果需要呈现在视觉化的图表中,以便于人们更好地理解数据。这门课程也将介绍如何使用Python进行数据可视化,包括使用matplotlib、seaborn等工具。 Python是一门流行的编程语言,在数据分析领域也有着广泛的应用。Python在数据处理、数据分析、数据可视化等方面拥有丰富的工具和库,能够帮助数据分析人员更好地完成数据分析任务。通过学习Python数据分析与应用:从数据获取到可视化这门课程,学员可以更深入地了解Python数据分析领域的应用,提升自己的数据分析能力。 ### 回答3: Python数据分析与应用是目前数据领域非常热门的技能,从数据获取到可视化是Python数据分析过程中的核心。下面就从数据获取、数据处理、数据可视化等方面来探讨Python数据分析过程。 数据获取 在Python数据分析过程中,数据获取是非常重要的一步。目前,Python数据分析使用最多的是pandas与NumPy库。pandas库可以帮助我们获取各种形式的结构化数据,包括csv、Excel表格、数据库等。NumPy库可以帮助我们获取数组等数据。 数据处理 数据获取完后,我们需要对数据进行处理。数据处理的方法有许多,常用的有去除重复值、缺失值填充、异常值处理、数据转换等。在Python中,pandas和NumPy库都提供了许多内置的方法来进行数据处理。此外,Python还提供了其他的一些库,如matplotlib和seaborn来进行数据可视化处理。 数据可视化 数据可视化是Python数据分析的另一个重要环节。Python提供了许多库来进行数据可视化,如matplotlib、seaborn和plotly等。这些库可以帮助我们生成各种类型的图表,如折线图、柱状图、散点图、热力图等。这些图表形式丰富,方便我们进行数据的分析和展示。 总的来说,Python数据分析与应用需要用到数据获取、数据处理和数据可视化等一系列技术。当然,Python数据分析还有许多其他的技术可以学习。Python数据分析师需要不断学习新的技术,掌握新的方法,以便在实践中能够更好地应用Python技术来实现高效的数据分析和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Francek Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值