Python数据科学:Scikit-Learn机器学习

4.1Scikit-Learn机器学习

Scikit-Learn使用的数据表示:二维网格数据表

实例1:通过Seaborn导入数据

def skLearn():'''scikit Learn基本介绍:return:'''import seaborn as sns#导入Iris数据集#注:一般网络访问不了iris = sns.load_dataset('iris')iris.head()

实例2:通过本地导入数据

def skLearn1():'''本地导入csv数据:return:'''df_iris = pd.read_csv('./data/Iris.csv')print(df_iris.head())

鸢尾花数据集说明:

sepal_length:萼片长度

sepal_width:萼片宽度

petal_length:花瓣长度

petal_width:花瓣宽度

species:鸢尾花类型,Iris-setosa(山鸢尾),Iris-versicolor(变色鸢尾),Iris-virginica(维吉尼亚鸢尾)

df_iris.head()

样本:鸢尾花数据集矩阵,矩阵的行n_samples;

特征:某些数据参数的列称为特征,特征列数n_features,鸢尾花数据集需要去掉species列;

特征矩阵:数据集的特征列矩阵,一般用X表示。维度为[n_samples,n_features]。

目标数组:一个标签或目标数组,一般为一维数组,一般用y表示。长度为n_samples。

实例3:构建特征矩阵,目标数组

def skLearn1():'''本地导入csv数据:return:'''df_iris = pd.read_csv('./data/Iris.csv')print(df_iris.head())#获取数据集行列print(df_iris.shape)#构建特征矩阵X_iris = df_iris.drop('species',axis=1)#构建目标数组y_iris = df_iris['species']#使用seaborn绘制图片sns.set()sns.pairplot(df_iris,hue='species',height=1.5)plt.show()

通过sns.pairplot绘制不同特征值相关性图。

对角线上是单一特征值之间,不同鸢尾花种类在该特征值上数据的重叠程度。

Scikit-Learn的评估器API:

  1. 通过Scikit-Learn中导入合适的评估器类,选择模型类;
  2. 选择合适数值对模型类实例化;
  3. 整理数据,获取特征矩阵,目标数组;
  4. 调用模型fit()方法,对数据进行拟合
  5. 对新的数据应用模型:有监督学习模型中使用predict()方法,无监督学习使用transform()或predict()方法。

实例4:构建机器学习有监督学习模型,对鸢尾花进行识别

def skLearn2():'''有监督学习,鸢尾花分类:return:'''#读取数据df_iris = pd.read_csv('./data/Iris.csv')#构建特征矩阵X_iris = df_iris.drop('species',axis=1)#构建目标数组y_iris = df_iris['species']#划分训练集,测试集from sklearn.model_selection import train_test_splitXtrain,Xtest,ytrain,ytest = train_test_split(X_iris,y_iris,random_state=1)#选择模型#高斯朴素贝叶斯from sklearn.naive_bayes import GaussianNBmodel = GaussianNB()#训练模型model.fit(Xtrain,ytrain)#使用模型对数据进行预测y_model = model.predict(Xtest)#如何验证y_model数据准确性?#和实际的数据进行比较,确定模型预测准确率from sklearn.metrics import accuracy_score#ytest:实际数据#y_model:模型预测数据print(accuracy_score(ytest,y_model))

实例5:无监督学习,鸢尾花数据降维

鸢尾花数据集有四个特征维度,对数据进行降维,保留数据的本质特征,用低维度矩阵表示高维数据。

def skLearn3():'''无监督学习,鸢尾花数据降维:return:'''#读取数据df_iris = pd.read_csv('./data/Iris.csv')#构建特征矩阵X_iris = df_iris.drop('species',axis=1)#构建目标数组y_iris = df_iris['species']#选择模型#主成分分析PCA,快速线性降维from sklearn.decomposition import PCA#设置超参数model = PCA(n_components=2)#拟合数据model.fit(X_iris)#将数据转换为二维数据X_2d = model.transform(X_iris)#将数据插入原数据df_iris['PCA1'] = X_2d[:,0]df_iris['PCA2'] = X_2d[:,1]print(df_iris)#sns绘制二维数据投影图sns.lmplot("PCA1","PCA2",hue='species',data=df_iris,fit_reg=False)plt.show()

实例6:无监督学习,对鸢尾花数据进行聚类分析

def skLearn4():'''无监督学习,在降维后数据基础上,聚类分析高斯混合模型:return:'''#读取数据df_iris = pd.read_csv('./data/Iris.csv')#构建特征矩阵X_iris = df_iris.drop('species',axis=1)#构建目标数组y_iris = df_iris['species']#选择模型#主成分分析PCA,快速线性降维from sklearn.decomposition import PCA#设置超参数model_pca = PCA(n_components=2)#拟合数据model_pca.fit(X_iris)#将数据转换为二维数据X_2d = model_pca.transform(X_iris)#将数据插入原数据df_iris['PCA1'] = X_2d[:,0]df_iris['PCA2'] = X_2d[:,1]#选择模型#高斯混合模型GMMfrom sklearn.mixture import GaussianMixture#设置超参数model = GaussianMixture(n_components=3,covariance_type='full')#拟合数据model.fit(X_iris)#预测数据y_model = model.predict(X_iris)#将预测数据放入原数据df_iris['y_gmm'] = y_model#绘制图片sns.lmplot("PCA1","PCA2",data=df_iris,hue='species',col='y_gmm',fit_reg=False)plt.show()

实例7:手写数字识别

步骤1:获取手写数字集,查看数据

def skLearn5():'''手写数字探索:return:'''#加载手写数字集from sklearn.datasets import load_digitsdigits = load_digits()#(1798,8,8)#一共1798个样本,8x8的像素print(digits.images.shape)#绘制手写数据图fig,axes = plt.subplots(10,10,figsize=(8,8))for i,ax in enumerate(axes.flat):#显示图片手写数字ax.imshow(digits.images[i],cmap='binary',interpolation='nearest')#显示目标数字ax.text(0.05,0.05,str(digits.target[i]),transform=ax.transAxes,color='blue')

步骤2:将数据进行降维处理,查看降维后数据。可以发现还是有许多数字之间是重叠的。

#8x8矩阵相当于64个特征值#获取特征矩阵X_digits = digits.data#获取目标列y_digits = digits.target#64维的特征值进行降维处理,流形学习算法from sklearn.manifold import Isomap#降到二维iso = Isomap(n_components=2)#拟合数据iso.fit(X_digits)#获取转换后的数据X_trans = iso.transform(X_digits)#显示二维数据plt.scatter(X_trans[:,0],X_trans[:,1],c=y_digits,edgecolor='none',alpha=0.6,cmap=plt.cm.get_cmap('rainbow',10))plt.colorbar(label='digit label',ticks=range(10))

步骤3:使用高斯朴素贝叶斯模型训练识别模型。使用混淆矩阵判断模型识别效果

#训练模型,数字识别#划分训练集,测试集from sklearn.model_selection import train_test_splitXtrain,Xtest,ytrain,ytest = train_test_split(X_trans,y_digits,random_state=0)#使用模型from sklearn.naive_bayes import GaussianNBmodel = GaussianNB()#训练数据model.fit(Xtrain,ytrain)#预测测试数据y_model = model.predict(Xtest)#获取识别准确率from sklearn.metrics import accuracy_score#识别率有70*print(accuracy_score(ytest,y_model))#如何知道模型识别的不足?#使用混淆矩阵from sklearn.metrics import confusion_matrixmat = confusion_matrix(ytest,y_model)print(mat)#绘制热力图sns.heatmap(mat,square=True,annot=True,cbar=False)plt.xlabel('predict value')plt.ylabel('true value')

从图像可以看出,识别数字2时,许多识别成了7或者1;识别5时,也识别错误成其他数字

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu服务器部署gitlab docker并配置nginx反向代理https访问

拉取镜像 docker pull gitlab/gitlab-ce运行容器 docker run --detach \--publish 9080:80 --publish 9022:22 --publish 9443:443\--namegitlab \--restartalways \--volume /home/docker/gitlab/config:/etc/gitlab \--volume /home/docker/gitlab/logs:/var/log/gitlab \-…

Linux_文件系统

假定外部存储设备为磁盘,文件如果没有被使用,那么它静静躺在磁盘上,如果它被使用,则文件将被加载进内存中。故此,可以将文件分为内存文件和磁盘文件。 内存文件 磁盘文件 软、硬链接 一.内存文件 1.1 c语言的文件接口 …

C/C++内存管理:new、delete功能及原理实现

目录 一、C/C内存分布 二、C中内存管理方式 2.1new/delete操作内置类型 2.2 new和delete操作自定义类型 三、operator new与operator delete函数 四、new和delete的实现原理 4.1内置类型 4.2自定义类型 五、定位new 一、C/C内存分布 int globalVar 1; static int sta…

概率分布-离散型概率分布

更多AI技术入门知识与工具使用请看下面链接: https://student-api.iyincaishijiao.com/t/iNSVmUE8/

C++【AVL树】

目录 1.AVL树(高度平衡搜索二叉树)定义 1.1平衡因子(Balance Factor简写成bf) 1.2avl树的定义 2.AVL树插入的基本操作 2.1逻辑抽象图 2.2插入流程 2.3左单旋 2.4右单旋 2.5右左双旋 2.6左右双旋 3.AVL树的检验技巧 3.1…

LeetCode、901. 股票价格跨度【中等,单调栈】

文章目录 前言LeetCode、901. 股票价格跨度【中等,单调栈】题目链接及分类思路思路1:暴力思路2:单调栈写法优化:单调栈简化写法(数组替代栈集合) 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、…

力扣精选算法100道——【模板】前缀和 (二维)

目录 🎈题目解析 🎈算法原理 🎈实现代码 二维前缀和【模板】 🎈题目解析 上一题我们讲述了一维的前缀和求法。 第一行三个参数,n是行数3,m是列数4,q3代表查询次数 接下来就是n行m列的矩阵…

《Java 简易速速上手小册》第5章:Java 开发工具和框架(2024 最新版)

文章目录 5.1 Maven 和 Gradle - 构建你的堡垒5.1.1 基础知识5.1.2 重点案例:使用 Maven 构建一个简单的 Java 应用5.1.3 拓展案例 1:使用 Gradle 构建一个 Spring Boot 应用5.1.4 拓展案例 2:使用 Maven 管理多模块项目 5.2 Spring 框架 - 你…

【数据分享】2000~2018年青藏高原0.05°逐日积雪深度数据集

各位同学们好,今天和大伙儿分享的是2000~2018年青藏高原0.05逐日积雪深度数据集。如果大家有下载处理数据等方面的问题,可以添加我的微信交流~ 闫大江, 马宁, 张寅生. (2021). 青藏高原0.05逐日积雪深度数据集(2000-2018). 国家青…

Java并发基础:PriorityBlockingQueue全面解析!

内容概要 PriorityBlockingQueue类能高效处理优先级任务,确保高优先级任务优先执行,它内部基于优先级堆实现,保证了元素的有序性,同时,作为BlockingQueue接口的实现,它提供了线程安全的队列操作&#xff0…

[缓存] 1. 缓存共性问题

1. 缓存的作用 为什么需要缓存呢?缓存主要解决两个问题,一个是提高应用程序的性能,降低请求响应的延时;一个是提高应用程序的并发性。 2. 缓存的分类 本地缓存,分布式缓存 3. 缓存数据分类 3.1 数据缓存 程序数据直接…

Linux_环境变量_命令行参数

一.环境变量 在Linux中自己写的程序必须要带路径才能运行,相对路径或是绝对路径,但是像ls pwd这样的程序,不带路径也能运行。当你想要运行一个程序时: 如果带有路径的话,则直接将对应路径的程序加载进内存&#xff0…