IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习 鸢尾花分类的原理和实现(二) -> 正文阅读

[人工智能]机器学习 鸢尾花分类的原理和实现(二)

前言:鸢尾花数据集是机器学习中的经典小规模数据集。通过如下实验,查阅资料和视频进行学习,将整个实验的学习心得和实验过程作出分享,希望对喜爱机器学习并入门的新手提供帮助,同时也鞭策自己稳步向前。

== 本文主要从“实验前期的基本功课,实验过程的重要实现,实验结束的学习总结”三部分进行编写,限于文章篇幅,后续内容将在后边的博文中更新,大家可自行对应阅读:==

(实验的内容要求和相关介绍点击这里跳转至第一篇博文)


(一)实验前期的基本功课:

数据集的划分:

  • 机器学习一般的数据集合会划分为两个部分,训练集S和测试集T
  • 西瓜书几种不同的划分方式:留出法,交叉验证法,自助法等(P25-P28)
  • 它们的划分比例按照对应规则各有不同:一般来讲,它们的划分比例一般为
  • 训练集:70~80%,默认约75%
  • 测试集:20~30%,默认约25%

数据集划分 api:

  • sklearn.model_selection.train_test_split( x, y, test_size, random_state )
  • x 数据集的特征值
  • y 数据集的标签值
  • test_size 测试集的大小,一般为float,传入0.2,代表测试集20%,测试集80%,不传默认 25%
  • random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
  • return 训练集特征值,测试集特征值,训练集的目标值,测试集的目标值(默认随机取)

核心代码如下:

from sklearn.datasets import load_iris,fetch_20newsgroups
#库的导入
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
iris=load_iris()
# 数据可视化
# 数据类型转化,把数据用DataFrame存储
iris_data=pd.DataFrame(data=iris.data,columns=['Sepal_Length','Sepal_Width','Petal_Length','Petal_Width'])
iris_data["target"]=iris.target
def iris_plot(data,col1,col2):
    sns.lmplot(x=col1,y=col2,data=data,hue="target",fit_reg=False)
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.title("鸢尾花数据展示")
    plt.xlabel(col1)
    plt.ylabel(col2)
    plt.show()
# iris_plot(iris_data,'Sepal_Length','Petal_Width')
# 数据集的划分
x_train,x_test,y_train,y_test=train_test_split(iris_data,iris.target)
# x.train,x_test,y_train,y_test分别是训练集特征值,测试集特征值,训练集的目标值,测试集的目标值
print("训练集的特征值是:\n",x_train)
print("测试集的特征值是:\n",x_test)
print("训练集的目标值是:\n",y_train)
print("测试集的特目标值是:\n",y_test)

运行结果如下:
在这里插入图片描述

我们注释掉前边的四行print,添加下边两行代码,可以看到训练集和测试集的占比,得出大概比例分别为75%和25%:

print("训练集的目标值的形状:\n",y_train.shape)
print("测试集的特目标值形状:\n",y_test.shape)

运行结果如下:
在这里插入图片描述

怕大家弄混,对目标值和特征值做补充(下图来自博文,点击进入):
在这里插入图片描述

改一下,让训练集和测试集的占比相同,加上参数test_size=0.5:

x_train,x_test,y_train,y_test=train_test_split(iris_data,iris.target,test_size=0.5)

运行效果:

在这里插入图片描述
random_state,随机数种子,下边通过实例演示:

x_train1,x_test1,y_train1,y_test1=train_test_split(iris_data,iris.target,test_size=0.2,random_state=2)
x_train2,x_test2,y_train2,y_test2=train_test_split(iris_data,iris.target,test_size=0.2,random_state=22)
print("测试集的目标值是:\n",y_test1)
print("测试集的目标值是:\n",y_test2)

运行效果:
在这里插入图片描述
总结:在需要设置random_state的地方给其赋一个值,当多次运行此段代码能够得到完全一样的结果,别人运行此代码也可以复现你的过程。若不设置此参数则会随机选择一个种子,执行结果也会因此而不同了,关于随机数种子的应用,请点击此处查看博文进行详细了解。


特征工程-特征预处理:

首先回顾几个概念:

特征工程:将原始数据转换为更好地代表预测模型潜在问题的特征的过程,从而提高了对未知数据的预测准确性。
特征抽取 :对文本等数据进行特征值化, 让计算机更好的理解数据。
对字典特征抽取 :对字典数据进行特征值化. 主要是对类别特征进行One-hot编码。

特征预处理在scikit-learn上的解释:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。
为什么要通过特征预处理来使数据达到归一化/标准化?
如下四个特征,单位或大小有差别,再如特征1和2的方差相比也很大,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征(很多博文举这个例子作为引例,原创未知,此处不加引用):
在这里插入图片描述
最终得到:
在这里插入图片描述

特征预处理包含内容(数值型数据的无量纲化):归一化和标准化(Normalizing和 Standardizing):
在对归一化和标准化了解之前,首先来看特征预处理API:

sklearn.preprocessing

1. 归一化

定义:也就是我们常说的0-1归一化,通过对原始数据进行变换把数据映射到默认为【0,1】之间
归一化目的:使得一个特征对结果不会造成更大的影响
公式:
在这里插入图片描述
API:

- sklearn.preprocessing.MinMaxScaler(feature_range=(0,1))
- feature_range:指定范围,默认0-1
- 即实例化转换器的时候transfer=MinMaxScaler(feature_range=(0,1))也可写成transfer=MinMaxScaler()
- MinMaxScalar.fit_transform(X)      
- X:numpy array格式的数据[n_samples,n_features]
- return:转换后的形状相同的array

归一化步骤 :

1)实例化MinMaxScalar
2)通过fit_transform转换

实现过程:

网上对归一化的演示普遍采用“约会网站”的案例,这个案例在《机器学习实战》的P20-P28页中有详细讲解,想要深度学习的朋友可以参考,我也通过综合学习实践后,把自己的实现过程以及实验内容写入下文作案例用到数据集dating.txt,上传资源至博客,可自行下载
在这里插入图片描述
处理技巧:右键复制路径再粘贴比较方便:
在这里插入图片描述
将数据集打印出来:
在这里插入图片描述
运行效果:
在这里插入图片描述
核心代码:

# 特征预处理
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
data=pd.read_csv("./data/dating.txt")
print(data)
# 归一化演示
# 1)用MinMaxScalar实例化一个转换器
transfer=MinMaxScaler(feature_range=(0,1))
# 2)转换器通过调用fit_transform转换
minimax_data=transfer.fit_transform(data[['milage','Liters','Consumtime']])
print("经过归一化处理之后的数据为:\n",minimax_data)

**归一化缺点:**在统计出错等情况下,最大最小值容易受异常点影响,比如年龄统计成几百,而归一化的计算过程用到最大值进行变换处理,因此鲁棒性差,只适合传统精确小数据场景,以后不能用这种方式进行归一化,于是出现了改良版,即标准化

2. 标准化

定义:通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围内
公式:
在这里插入图片描述
作用于每一列,即对每一列的数据求均值和方差,其中mean为平均值,分母是标准差
**如果出现异常点,由于具有一定的数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小,这改善了归一化带来的问题。**所以回到刚才异常点的地方,再看标准化:
在这里插入图片描述
API:

- sklearn.preprocessing.StandardScaler( )
- 处理之后每列来说所有数据都聚集在均值0附近标准差差为1
- StandardScaler.fit_transform(X)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的array

运行效果:
在这里插入图片描述
核心代码:

# 特征预处理
from sklearn.preprocessing import MinMaxScaler,StandardScaler
import pandas as pd
data=pd.read_csv("./data/dating.txt")
# print(data)
# 标准化演示
# 1)用StandardScaler实例化一个转换器
transfer=StandardScaler()
# 2)转换器通过调用fit_transform转换
sta_data=transfer.fit_transform(data[['milage','Liters','Consumtime']])
print("经过标准化处理之后的数据为:\n",sta_data)

总结:

  1. 异常值影响小
  2. 适合现代嘈杂大数据场景

下一篇更新“实验过程的重要实现”和“实验结束的学习总结”部分,感谢大家的阅读

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:51:20  更:2021-10-01 16:55:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:51:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码