找回密码
 会员注册
查看: 27|回复: 0

Pythonsklearn.datasets使用(数据集、常用函数、示例代码)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
70601
发表于 2024-9-5 14:46:02 | 显示全部楼层 |阅读模式
文章目录一、sklearn.datasets数据集二、sklearn.datasets常用函数1.加载数据集2.生成数据集3.图像数据集三、各数据集的作用1、合成数据集2、真实数据集四、数据集使用代码示例五、详细使用示例load_digits完整使用fetch_20newsgroups完整使用六、常用函数详细介绍make_regression生成一个随机的回归问题train_test_split划分训练集和测试集classification_report分类报告参考一、sklearn.datasets数据集sklearn.datasets中包含了多种多样的数据集,这些数据集主要可以分为以下几大类:玩具数据集(Toydatasets):波士顿房价(BostonHousing)数据集:包含了506个波士顿地区的房屋数据,每个数据点有13个特征变量和一个目标变量(房屋价格的中位数)。鸢尾花(Iris)数据集:这是一个常用的分类数据集,包含了3种不同的鸢尾花及其4个特征。糖尿病(Diabetes)数据集:关于糖尿病患者的一些生理指标与一年后的疾病进展指数之间的关系。手写数字(Digits)数据集:包含了1797个手写数字的图像数据。还有其他一些小型标准数据集,如乳腺癌(BreastCancer)数据集等。真实世界中的数据集(Real-worlddatasets):这些数据集通常需要通过fetch_函数从网络上下载,它们是近年来真实收集的数据,适用于更复杂的机器学习任务。例如,新闻组(20Newsgroups)数据集,这是一个用于文本分类的大型数据集。样本生成器(Samplegenerators):sklearn.datasets还提供了一系列函数来生成人工数据集,如make_classification、make_regression等。这些函数可以根据用户指定的参数生成用于分类、回归等任务的数据集。样本图片(Sampleimages):sklearn.datasets也包含了一些用于图像处理和计算机视觉任务的数据集,如Olivetti人脸识别数据集等。SVMLight或LibSVM格式的数据:可以加载SVMLight或LibSVM格式的数据集,这些格式常用于机器学习竞赛和研究中。从OpenML下载的数据:OpenML是一个用于机器学习数据和实验的公共存储库。通过sklearn.datasets.fetch_openml()函数,可以从OpenML下载各种数据集。需要注意的是,sklearn.datasets中的数据集主要是为了方便教学和入门学习而提供的。在实际应用中,可能需要使用更大规模、更复杂的数据集来训练模型。此外,随着时间的推移,sklearn库可能会更新和添加新的数据集,因此建议查阅最新的官方文档以获取最准确的信息。二、sklearn.datasets常用函数sklearn.datasets模块提供了多个函数来加载和生成数据集。以下是一些sklearn.datasets中常用的函数:1.加载数据集load_iris():加载鸢尾花数据集,这是一个常用的多类分类数据集。load_digits():加载手写数字数据集,每个实例都是一张8x8的数字图像及其对应的数字类别。load_boston():加载波士顿房价数据集,这是一个回归问题的数据集。load_breast_cancer():加载乳腺癌数据集,这是一个二分类问题的数据集。load_diabetes():加载糖尿病数据集,这个数据集可以用于回归分析。fetch_20newsgroups(subset='train'):下载和加载20个新闻组文本数据集的一个子集,用于文本分类或聚类。fetch_openml(name='mnist_784',...):从OpenML获取数据集,例如著名的MNIST手写数字数据集。2.生成数据集make_blobs(n_samples=100,...):生成用于聚类的随机数据。make_classification(n_samples=100,...):生成一个随机的二分类问题。make_regression(n_samples=100,...):生成一个随机的回归问题。make_moons(n_samples=100,...):生成两个交错的月牙形状的数据集,用于分类。make_circles(n_samples=100,...):生成两个环形的数据集,一个内环,一个外环,也用于分类。make_s_curve(n_samples=100,...):生成S形曲线数据集,这是一个非线性可分的数据集。3.图像数据集fetch_olivetti_faces():下载Olivetti人脸数据集,通常用于人脸识别或图像处理。fetch_lfw_people(min_faces_per_person=70,...):下载LabeledFacesintheWild(LFW)人脸数据集的一个子集。fetch_lfw_pairs(subset='train',...):下载LFW人脸数据集中的成对面部图像,用于验证面部识别算法。这些函数提供了方便的方式来获取或生成数据,以便在机器学习项目中进行测试和验证。每个函数都有许多参数可以调整,以便根据需要生成或加载特定类型的数据集。在使用这些函数时,请务必查阅官方文档以了解所有可用的参数和选项。三、各数据集的作用1、合成数据集make_blobs:作用:生成随机的数据集聚类,通常用于测试聚类算法。特点:可以通过调整参数来控制数据点的数量、中心点的数量、标准差等,从而生成具有不同特性的聚类数据。make_classification:作用:生成一个随机的二分类问题,用于测试分类算法。特点:可以指定样本数量、特征数量、类别分隔的难易程度等参数,以模拟不同复杂度的分类问题。make_regression:作用:生成一个随机的回归问题,用于测试回归算法。特点:可以设定输入特征的数量、噪声水平等,以生成具有不同特性的回归数据。make_moons:作用:生成两个交错的半圆形数据,通常用于测试分类算法的性能,特别是在处理非线性可分数据时的表现。特点:可以通过调整噪声水平、两个半圆的间距等参数来增加分类问题的难度。make_circles:作用:生成两个环形的数据集,一个在内环,一个在外环,也常用于测试分类算法处理非线性数据的能力。特点:与make_moons类似,这也是一个用于测试非线性分类问题的数据集生成器。2、真实数据集load_iris:作用:提供鸢尾花数据集,这是一个经典的机器学习数据集,包含三种不同类型的鸢尾花(山鸢尾、变色鸢尾、维吉尼亚鸢尾)及其四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。应用场景:常用于多类分类问题的实验和演示。load_digits:作用:提供手写数字(0-9)的数据集,每个样本都是8x8的图像。这是一个用于图像识别和机器学习入门的数据集。应用场景:常用于图像分类、特征提取等任务的实验和演示。load_boston:作用:提供波士顿房价数据集,包含波士顿郊区房屋的中位数价格以及各项与房价相关的特征(如犯罪率、住宅平均房间数、是否靠近查尔斯河等)。应用场景:主要用于回归问题的实验和演示,特别是房价预测等经济分析领域。load_breast_cancer:作用:提供乳腺癌数据集,包含良性和恶性两种类别的乳腺肿块样本及其相关特征(如肿块半径、纹理、周长等)。应用场景:常用于医学领域的分类问题实验和演示,特别是癌症检测和诊断。fetch_20newsgroups:作用:提供一个文本分类的数据集,包含来自20个不同新闻组的文档(如计算机、科学、政治、体育等主题)。这是一个用于自然语言处理和文本分类任务的数据集。应用场景:常用于文本挖掘、主题建模、情感分析等领域的实验和演示。四、数据集使用代码示例以下是sklearn.datasets中几个数据集的示例使用代码:加载鸢尾花(Iris)数据集fromsklearn.datasetsimportload_irisiris=load_iris()X,y=iris.data,iris.targetprint(f"特征数量:{X.shape[1]}")print(f"类别数量:{len(set(y))}")123456加载手写数字(Digits)数据集fromsklearn.datasetsimportload_digitsdigits=load_digits()X,y=digits.data,digits.targetprint(f"图像数量:{len(X)}")print(f"每张图像的特征数量:{X[0].shape[0]}")123456加载波士顿房价(Boston)数据集fromsklearn.datasetsimportload_bostonboston=load_boston()X,y=boston.data,boston.targetprint(f"特征数量:{X.shape[1]}")print(f"房价样本数量:{len(y)}")123456加载乳腺癌(BreastCancer)数据集fromsklearn.datasetsimportload_breast_cancercancer=load_breast_cancer()X,y=cancer.data,cancer.targetprint(f"特征数量:{X.shape[1]}")print(f"样本数量:{len(y)},其中0代表良性,1代表恶性")123456加载糖尿病(Diabetes)数据集fromsklearn.datasetsimportload_diabetesdiabetes=load_diabetes()X,y=diabetes.data,diabetes.targetprint(f"特征数量:{X.shape[1]}")print(f"患者数量:{len(y)}")123456下载和加载20个新闻组(20newsgroups)文本数据集的一个子集fromsklearn.datasetsimportfetch_20newsgroups#仅下载训练子集并取部分类别categories=['alt.atheism','soc.religion.christian','comp.graphics','sci.med']newsgroups=fetch_20newsgroups(subset='train',categories=categories)X,y=newsgroups.data,newsgroups.targetprint(f"文档数量:{len(X)}")print(f"类别数量:{len(set(y))}")12345678从OpenML获取MNIST手写数字数据集fromsklearn.datasetsimportfetch_openmlmnist=fetch_openml('mnist_784',version=1)X,y=mnist.data,mnist.targetprint(f"图像数量:{len(X)}")print(f"每张图像的特征数量:{X[0].shape[0]}")123456请注意,在实际使用中,您可能需要根据自己的需求对这些数据集进行预处理,例如特征缩放、编码分类变量等。此外,fetch_openml可能需要网络连接以下载数据集。如果您使用的是JupyterNotebook或类似的环境,并且数据集很大,下载可能需要一些时间。五、详细使用示例load_digits完整使用该函数加载了一个手写数字数据集,其中包含了1797个8x8的数字图像以及对应的数字类别。fromsklearn.datasetsimportload_digitsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_scoreimportmatplotlib.pyplotasplt#加载手写数字数据集digits=load_digits()#分割数据集为训练集和测试集X_train,X_test,y_train,y_test=train_test_split(digits.data,digits.target,test_size=0.2,random_state=42)#创建一个支持向量机分类器clf=SVC(gamma=0.001)#在训练集上训练分类器clf.fit(X_train,y_train)#使用训练好的分类器对测试集进行预测y_pred=clf.predict(X_test)#计算预测的准确率accuracy=accuracy_score(y_test,y_pred)print(f"Accuracy:{accuracy:.2f}")#可视化测试集中的一些图像及其预测结果test_images=X_test[:16]#取测试集的前16张图像test_labels=y_test[:16]#和对应的标签predictions=y_pred[:16]#和对应的预测结果images_to_show=test_images.reshape(-1,8,8)#将图像数据重塑为8x8的形状fig,axes=plt.subplots(4,4)fig.subplots_adjust(hspace=1,wspace=0.5)fori,axinenumerate(axes.flat):ax.imshow(images_to_show[i],cmap='gray_r')ax.set_title(f"True:{test_labels[i]}")ax.set_xlabel(f"Prediction:{predictions[i]}")ax.set_xticks(())ax.set_yticks(())plt.show()12345678910111213141516171819202122232425262728293031323334353637383940414243fetch_20newsgroups完整使用fetch_20newsgroups是scikit-learn库中的一个函数,用于加载著名的20Newsgroups文本数据集。这个数据集包含了大约20,000个新闻组文档,均匀分为20个不同的类别。常用于文本挖掘、主题建模、情感分析等领域的实验和演示。fromsklearn.datasetsimportfetch_20newsgroupsfromsklearn.feature_extraction.textimportCountVectorizerfromsklearn.naive_bayesimportMultinomialNBfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportclassification_report#加载20Newsgroups数据集newsgroups=fetch_20newsgroups(subset='all')#显示数据集的一些基本信息print("数据集大小:",len(newsgroups.data))print("目标类别:",newsgroups.target_names)#将数据集分为训练集和测试集X_train,X_test,y_train,y_test=train_test_split(newsgroups.data,newsgroups.target,test_size=0.2,random_state=42)#使用CountVectorizer进行文本向量化vectorizer=CountVectorizer(stop_words='english')X_train_vectors=vectorizer.fit_transform(X_train)X_test_vectors=vectorizer.transform(X_test)#使用多项式朴素贝叶斯分类器进行训练clf=MultinomialNB()clf.fit(X_train_vectors,y_train)#在测试集上进行预测y_pred=clf.predict(X_test_vectors)#打印分类报告print(classification_report(y_test,y_pred,target_names=newsgroups.target_names))123456789101112131415161718192021222324252627282930打印输出数据集大小:18846目标类别:['alt.atheism','comp.graphics','comp.os.ms-windows.misc','comp.sys.ibm.pc.hardware','comp.sys.mac.hardware','comp.windows.x','misc.forsale','rec.autos','rec.motorcycles','rec.sport.baseball','rec.sport.hockey','sci.crypt','sci.electronics','sci.med','sci.space','soc.religion.christian','talk.politics.guns','talk.politics.mideast','talk.politics.misc','talk.religion.misc']precisionrecallf1-scoresupportalt.atheism0.860.910.88151comp.graphics0.670.920.78202comp.os.ms-windows.misc0.960.350.52195comp.sys.ibm.pc.hardware0.610.860.71183comp.sys.mac.hardware0.890.900.90205comp.windows.x0.850.850.85215misc.forsale0.930.700.80193rec.autos0.900.950.93196rec.motorcycles0.950.940.95168rec.sport.baseball0.980.960.97211rec.sport.hockey0.950.970.96198sci.crypt0.920.960.94201sci.electronics0.920.830.87202sci.med0.950.950.95194sci.space0.920.970.95189soc.religion.christian0.880.990.93202talk.politics.guns0.890.930.91188talk.politics.mideast0.951.000.97182talk.politics.misc0.840.890.87159talk.religion.misc0.950.580.72136accuracy0.873770macroavg0.890.870.873770weightedavg0.890.870.87377012345678910111213141516171819202122232425262728六、常用函数详细介绍make_regression生成一个随机的回归问题make_regression是sklearn.datasets模块中的一个函数,用于生成回归问题的样本数据。以下是关于make_regression函数的详细介绍:函数语法sklearn.datasets.make_regression(n_samples=100,n_features=100,n_informative=10,n_targets=1,bias=0.0,effective_rank=None,tail_strength=0.5,noise=0.0,shuffle=True,coef=False,random_state=None)1参数说明n_samples:整数,可选(默认为100)。表示生成的样本数量。n_features:整数,可选(默认为100)。表示每个样本的特征数量,即自变量的个数。n_informative:整数,可选(默认为10)。表示有信息的特征数量,这些特征将被用来构造线性模型以生成输出。换句话说,这些特征是对预测目标变量有用的。n_targets:整数,可选(默认为1)。表示回归目标的数量,即对应于一个样本输出向量y的维度。在大多数情况下,这是一个标量值,但也可以设置为多个目标。bias:浮点数,可选(默认为0.0)。表示偏置项或截距。effective_rank:整数或None,可选(默认为None)。如果非None,则数据是通过这种方式生成的:先生成一个正态分布的随机矩阵,然后用其奇异值分解的前effective_rank个奇异向量和奇异值来构造数据矩阵。如果为None,则使用完整的奇异值分解来生成数据。tail_strength:浮点数,可选(默认为0.5)。该参数影响了特征之间的相关性衰减速度。较大的tail_strength值意味着特征之间将具有更强的相关性。noise:浮点数,可选(默认为0.0)。表示添加到输出中的高斯噪声的标准差。噪声是添加到由线性模型生成的输出上的。shuffle:布尔值,可选(默认为True)。如果为True,则打乱样本和特征的顺序。如果为False,则按原始顺序返回样本和特征。coef:布尔值,可选(默认为False)。如果为True,则返回数据的系数(即线性模型的权重)。这些系数可用于了解哪些特征对目标变量的影响更大。random_state:整数、RandomState实例或None(默认为None)。控制随机数生成器的种子或RandomState实例。如果为整数,则它指定了随机数生成器的种子;如果为RandomState实例,则它本身就是随机数生成器;如果为None,则随机数生成器是np.random。设置随机状态可以确保每次运行代码时生成相同的数据集,便于结果复现和比较。返回值函数返回以下值:X:形状为(n_samples,n_features)的数组,表示生成的特征数据。y:形状为(n_samples,)或(n_samples,n_targets)的数组,表示生成的目标变量(回归值)。如果设置了多个目标(n_targets>1),则y的形状将为(n_samples,n_targets)。coef(仅在coef=True时返回):形状为(n_informative,)或(n_targets,n_informative)的数组,表示用于生成数据的线性模型的系数。这些系数可以帮助理解哪些特征对目标变量的预测最重要。如果设置了多个目标(n_targets>1),则coef的形状将为(n_targets,n_informative),其中每一行对应于一个目标的系数向量。train_test_split划分训练集和测试集train_test_split是scikit-learn库中的一个函数,用于将数据集随机划分为训练集和测试集。这是机器学习中常用的一个步骤,目的是确保模型不仅在训练数据上表现良好,还能在未见过的数据(即测试数据)上有良好的表现。函数的基本用法如下:fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)123X和y分别是特征和标签的数据。test_size参数指定了测试集的大小,这里是总数据的20%。random_state参数是一个随机种子,用于确保每次划分数据时都能得到相同的结果。这在需要重复实验或比较不同模型时非常有用。函数返回四个数组:X_train(训练集的特征)、X_test(测试集的特征)、y_train(训练集的标签)和y_test(测试集的标签)。classification_report分类报告classification_report是scikit-learn库中的一个函数,它用于显示主要分类指标的文本报告,包括每个类的精确度(precision)、召回率(recall)、F1分数(F1-score)以及支持数(即每个类别的样本数)。这个函数对于评估分类模型的性能非常有用,因为它提供了一个全面的、易于理解的性能指标概览。下面是classification_report函数的基本用法:fromsklearn.metricsimportclassification_report,accuracy_scorey_true=[0,0,1,2,2,2]y_pred=[0,0,0,2,2,1]target_names=['class0','class1','class2']print(classification_report(y_true,y_pred,target_names=target_names))123456输出将类似于以下内容:precisionrecallf1-scoresupportclass00.671.000.802class10.000.000.001class21.000.670.803accuracy0.676macroavg0.560.560.536weightedavg0.720.670.676123456789在这个报告中:precision(精确度)表示预测为正且实际为正的样本占所有预测为正的样本的比例。recall(召回率)表示预测为正且实际为正的样本占所有实际为正的样本的比例。f1-score是精确度和召回率的调和平均数,用于综合评价模型的性能。support表示每个类别的样本数。classification_report还提供了macroavg和weightedavg,分别表示所有类别的指标的平均值(未加权的平均值)和根据每个类别的支持数加权的平均值。这些平均值有助于从整体上评估模型的性能。计算公式解析为了解释precision、recall和F1-score是如何计算的,我们先要理解几个基本概念:真正例(TruePositives,TP):实际为正例且被预测为正例的样本数。假正例(FalsePositives,FP):实际为负例但被预测为正例的样本数。真负例(TrueNegatives,TN):实际为负例且被预测为负例的样本数(在分类报告中通常不直接使用)。假负例(FalseNegatives,FN):实际为正例但被预测为负例的样本数。现在,我们来看具体的计算方式:1)精确度(Precision)精确度是指预测为正例的样本中,真正为正例的比例。对于每个类别,其计算公式为:[\text{Precision}=\frac{TP}{TP+FP}]2)召回率(Recall)召回率是指所有真正的正例中,被正确预测出来的比例。对于每个类别,其计算公式为:[\text{Recall}=\frac{TP}{TP+FN}]3)F1分数(F1-score)F1分数是精确度和召回率的调和平均数,用于提供一个单一的指标来衡量分类器的性能。其计算公式为:[F1=2\times\frac{\text{Precision}\times\text{Recall}}{\text{Precision}+\text{Recall}}]参考https://www.cnblogs.com/Zshirly/p/15871498.htmlhttp://openml.org
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 12:11 , Processed in 0.489810 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表