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

news2025/1/10 2:03:56

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_split

    Xtrain,Xtest,ytrain,ytest = train_test_split(X_iris,y_iris,random_state=1)



    #选择模型

    #高斯朴素贝叶斯

    from sklearn.naive_bayes import GaussianNB

    model = 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]



    #选择模型

    #高斯混合模型GMM

    from 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_digits

    digits = 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_split

Xtrain,Xtest,ytrain,ytest = train_test_split(X_trans,y_digits,random_state=0)

#使用模型

from sklearn.naive_bayes import GaussianNB

model = 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_matrix

mat = 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.coloradmin.cn/o/1449339.html

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

相关文章

Spring Boot 笔记 020 redis集成

1.1 安装redis Windows 下 Redis 安装与配置 教程_redis windows-CSDN博客 2.1 引入redis坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2.2 配置…

144.【Activiti 7】

Activiti 7 工作流 (一)、工作流程1.概念2.工作流系统3.适用行业4.具体应用5.实现方式 (二)、Activiti7概述1.介绍(1).BPM 介绍(2).BPM软件(3). BPMN 2.使用步骤(1).部署activiti(2).流程定义(3).流程定义部署(4).启动一个流程实例(5).用户查询待办任务(Task)(6).用户办理任务(…

第13讲创建图文投票

创建图文投票实现 图文投票和文字投票基本一样&#xff0c;就是在投票选项里面&#xff0c;多了一个选项图片&#xff1b;、 <view class"option_item" v-for"(item,index) in options" :key"item.id"><view class"option_input&…

如何在JavaScript中使用大于和小于运算符

在你的 JavaScript 程序中&#xff0c;你经常需要比较两个值&#xff0c;以确定一个是否大于另一个或小于另一个。这就是大于和小于运算符派上用场的地方。 在本文中&#xff0c;我们将通过代码示例更详细地介绍如何使用这些运算符。 &#xff08;本文内容参考&#xff1a;ja…

Mysql中关于on,in,as,where的区别

目录 Mysql on,in,as,where的区别 Mysql语句问题解决 1、left join数据筛选问题 2、相同数据重复筛选使用问题 3、根据某个字段排序取每个类别最后三条数据或前三条数据 4、业务逻辑书写位置问题 5、查找另一表内和本表相关字段的数量 6、关于union的使用 7、limit的巧…

Ubuntu如何设置成中文

1、右上角点击&#xff08;音量图标和电池图标位置&#xff09;&#xff0c;选择“Settings”&#xff08;设置&#xff09;。 2、左侧选择“Region & Language”&#xff08;区域与语言&#xff09;&#xff0c;然后选择“Manage Installed Languages”&#xff08;管理已…

测试开发-2-概念篇

文章目录 衡量软件测试结果的依据—需求1.需求的概念2.从软件测试人员角度看需求3.为什么需求对软件测试人员如此重要4.如何才可以深入理解被测试软件的需求5.测试用例的概念6.软件错误&#xff08;BUG&#xff09;的概念7.开发模型和测试模型8.软件的生命周期9.瀑布模型&#…

中科大计网学习记录笔记(十一):CDN

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

Qt 的准备知识

文章目录 1. Qt 背景介绍2. 搭建 Qt 开发环境3. 认识 Qt Creator3.1 main.cpp3.2 widget.h3.3 widget.cpp3.4 Forms3.5 .pro文件 1. Qt 背景介绍 Qt 是⼀个 跨平台的 C 图形用户界面应用程序框架 。它为应用程序开发者提供了建立艺术级图形界⾯所需的所有功能。它是完全⾯向对…

SAP MM学习笔记42 - 特殊调达流程 - 受托品(寄售)

上一章讲了 外注加工的知识。 详细可以参考如下链接。 SAP MM学习笔记41 - 特殊调达流程 - 外注加工-CSDN博客 咱们继续学习特殊调达流程。 本章主要讲受托品。 1&#xff0c;什么是受托品 &#xff08;寄售&#xff09; 仕入先提供的商品&#xff0c;商品是放在你公司了&a…

Python爬虫——解析库安装(1)

目录 1.lxml安装2.Beautiful Soup安装3.pyquery 的安装 我创建了一个社区&#xff0c;欢迎大家一起学习交流。社区名称&#xff1a;Spider学习交流 注&#xff1a;该系列教程已经默认用户安装了Pycharm和Anaconda&#xff0c;未安装的可以参考我之前的博客有将如何安装。同时默…

C语言第二十四弹---指针(八)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、数组和指针笔试题解析 1.1、字符数组 1.1.1、代码1&#xff1a; 1.1.2、代码2&#xff1a; 1.1.3、代码3&#xff1a; 1.1.4、代码4&#xff1a; 1…

LeetCode 每日一题 Day 62 - 75

1686. 石子游戏 VI Alice 和 Bob 轮流玩一个游戏&#xff0c;Alice 先手。 一堆石子里总共有 n 个石子&#xff0c;轮到某个玩家时&#xff0c;他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。 给你…

手动汉化unity编辑器,解决下载中文语言报错问题

手动汉化unity编辑器&#xff0c;解决下载中文语言报错问题 START 最近在下载支持微信小程序版本的编辑器时&#xff0c;中文语言包&#xff0c;一直无法下载。记录一下 手动汉化unity编辑器的方法 &#xff0c;帮助和我遇到同样问题的人。 解决方案 1. 下载汉化包 https:…

建模语言CellML初步

文章目录 简介洛伦兹吸引子仿真 简介 CellML是主打计算生理学的一个编程语言&#xff0c;擅长处理微分方程问题&#xff0c;并且内置了单位系统&#xff0c;是细胞层次的建模工具。openCOR为其运行环境&#xff0c;提供了舒适的代码编辑窗口&#xff0c;以及一系列IDE工具&…

QEMU使用步骤

1、安装虚拟机环境&#xff1a;ubuntu-16.04.7-desktop-amd64.iso,下载地址&#xff1a;Index of /ubuntu-releases/16.04.7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2、安装gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz到/opt目录&#xf…

漫漫数学之旅020

文章目录 经典格言数学习题古今评注名人小传 - 尼尔斯玻尔 经典格言 专家就是这样一个人&#xff0c;在一个很狭小的领域里犯下一切可能犯的错误。——尼尔斯玻尔&#xff08;Niels Bohr&#xff09; 尼尔斯玻尔&#xff0c;这位量子物理界的巨头&#xff0c;以一句幽默且充满…

【Python】高级数据类型

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

几个经典金融理论

完整EA&#xff1a;Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 一、预期效用理论 预期效用理论是描述人们在做出决策时如何考虑风险和不确定性的一种理论。该理论最初由经济学家冯诺伊曼&#xff08;John von Neumann&#xff09;和奥斯卡摩根斯坦恩&#xff08;Oskar…

图像配准之HomographyNet

文章名称&#xff1a;Deep Image Homography Estimation&#xff0c;论文地址&#xff1a;https://arxiv.org/pdf/1606.03798.pdf&#xff0c;代码地址&#xff1a;GitHub - mazenmel/Deep-homography-estimation-Pytorch: Deep homography network with Pytorch 1、背景介绍 …