黄佳《零基础学机器学习》chap1笔记
黄佳 《零基础学机器学习》 chap1笔记
这本书实在是让我眼前一亮!!! 感觉写的真的太棒了!
文章目录
- 黄佳 《零基础学机器学习》 chap1笔记
- 第1课 机器学习快速上手路径—— 唯有实战
- 1.1 机器学习族谱
- 1.2 云环境
- 入门实践:推断加州房价
- 1.3 基本的机器学习术语
- 1.4 python和机器学习框架
- 1.5 机器学习项目实战架构
- 1.5.1 问题定义
- 1.5.2 数据的收集和预处理
- 1.原始数据的准备
- 2.数据的预处理
- 3.特征工程和特征提取
- 4.载入MNIST数据集
- 1.5.3 模型(算法)的选择
- 1.5.4 选择机器学习模型
- 内部参数
- 超参数(hyperparameter)
- 在本环节确定内部参数
- 1.5.5 超参数调试和性能优化
- **训练集、验证集和测试集**
- K折验证
- 模型的优化和泛化
- 怎么看预测结果
- 反思
- 1.6 小结
- 1.7 练习
第1课 机器学习快速上手路径—— 唯有实战
1.1 机器学习族谱
参考:用mermaid在typora中画思维导图
- 下图使用mermaid在typora中绘制
- 一些常见的机器学习应用场景和机器学习模型
趋势预测
人脸识别
文档分类
1.2 云环境
- Kaggle 和 Colab 都挺好用的
入门实践:推断加州房价
读取数据
Kaggle的话注意打开Internet On的按钮
import pandas as pd #导入Pandas,用于数据读取和处理 # 读入房价数据,示例代码中的文件地址为internet链接,读者也可以下载该文件到本机进行读取 # 如,当数据集和代码文件位于相同本地目录,路径名应为"./house.csv",或直接放"house.csv"亦可 df_housing = pd.read_csv("https://raw.githubusercontent.com/huangjia2019/house/master/house.csv") df_housing.head() #显示加州房价数据
这是加州各地区房价的整体统计信息(不是 一套套房子的价格信息),是1990年的人口普查结果之一,共包含17 000个样本。其中包含每一个具体地区的经度(longitude)、纬度 (latitude)、房屋的平均年龄(housing_median_age)、房屋数量 (total_rooms)、家庭收入中位数(median_income)等信息,这些信息都是加州地区房价的特征。数据集最后一列“房价中位数” (median_house_value)是标签。
这个机器学习项目的目标,就是根据已有的数据样本,对其特征进行推理归纳,得到一个函数模型后,就可以用它推断加州其他地区的房价中位数。
构建特征集和标签集
X = df_housing.drop("median_house_value",axis = 1) #构建特征集X y = df_housing.median_house_value #构建标签集y
- 上面的代码使用drop方法,把最后一列median_house_value字段去 掉,其他所有字段都保留下来作为特征集X,而这个median_house_value 字段就单独赋给标签集y
划分数据集
from sklearn.model_selection import train_test_split #导入数据集拆分工具 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) #以80%/20%的比例进行数据集的拆分
- 现在要把数据集一分为二,80%用于机器训练(训练数据集),剩下的留着做测试(测试数据集)如下段代码所示。这也就是告诉机器:你看,拥有这些特征的地方,房价是这样的,等一会儿你想个办法给我猜猜另外20%的地区的房价。
- 其实,另外20%的地区的房价数据,本来就有了,但是我们假装不知道,故意让机器用自己学到的模型去预测。所以,之后通过比较预测值和真值,才知道机器“猜”得准不准,给模型打分
选定模型,训练机器,拟合函数,确定参数
from sklearn.linear_model import LinearRegression #导入线性回归算法模型 model = LinearRegression() #使用线性回归算法 model.fit(X_train, y_train) #用训练集数据,训练机器,拟合函数,确定参数
- 首先选择LinearRegression(线性回归)作为这个机器学习的模型,这是选定了模型的类型,也就是算法;
- 然后通过其中的fit方法来训练机器,进行函数的拟合。拟合意味着找到最优的函数去模拟训练集中的输入(特征)和目标(标签)的关系,这是确定模型的参数。
利用模型进行预测
y_pred = model.predict(X_test) #预测测试集的Y值 print ('房价的真值(测试集)',y_test) print ('预测的房价(测试集)',y_pred)
给预测打分
print("给预测评分:", model.score(X_test, y_test)) #评估预测结果
Sklearn线性回归模型的score属性给出的是R2分数, 它是一个机器学习模型的评估指标,给出的是预测值的方差与总体方 差之间的差异
可视化
import matplotlib.pyplot as plt #导入matplotlib画图库 #用散点图显示家庭收入中位数和房价中位数的分布 plt.scatter(X_test.median_income, y_test, color='brown') #画出回归函数(从特征到预测标签) plt.plot(X_test.median_income, y_pred, color='green', linewidth=1) plt.xlabel('Median Income') #X轴-家庭收入中位数 plt.ylabel('Median House Value') #Y轴-房价中位数 plt.show() #显示房价分布和机器习得的函数图形
- 轴的特征太多,无法全部展示,选择了与房价关系最密切的 “家庭收入中位数”median_income作为代表特征来显示散点图。
- 图中的点就是家庭收入/房价分布,而绿色线就是机器学习到的函数模 型,很粗放,都是一条一条的线段拼接而成,但是仍然不难看出,这 个函数模型大概拟合了一种线性关系。
1.3 基本的机器学习术语
术语 | 定义 | 数学描述 | 示例 |
---|---|---|---|
数据集 | 数据的集合 | {(X1,y1),⋯.(Xn,yn)}\{(X_1,y_1),\cdots.(X_n,y_n)\}{(X1,y1),⋯.(Xn,yn)} | 1000个北京市房屋的面积、楼层、位置、朝向,以及部分房价信息的数据集 |
样本 | 数据集中的一条具体记录 | {(X1,y1)}\{(X_1,y_1)\}{(X1,y1)} | 一个房屋的数据记录 |
特征 | 用于描述数据的输入变量 | {x1,x2,⋯.xn}\{x_1,x_2,\cdots.x_n\}{x1,x2,⋯.xn}也是一个向量 | 面积(x1{x_1}x1)、楼层(x2{x_2}x2)、位置(x3{x_3}x3)、朝向(x4{x_4}x4) |
标签 | 要预测的真实事物或结果,也称为目标 | y | 房价 |
有标签样本 | 有特征、标签,用于训练模型 | (X,y) | 800个北京市房屋的面积、楼层、位置、朝向,以及房价信息 |
无标签样本 | 有特征,无标签 | (X, ?) | 200个北京市房屋的面积、楼层、位置、朝向,但是无房价信息 |
模型 | 将样本的特征映射到预测标签 | f(X),其实也就是函数 | 通过面积、楼层、位置、朝向这些信息来确定房价的函数 |
模型中的参数 | 模型中的参数确定了机器学习的具体模型 | f(X)这个函数的参数 | 如f(X)=3X+2中的3和2 |
模型的映射结果 | 通过模型映射出无标签样本的标签 | y’ | 200个被预测出来的房价 |
机器学习 | 通过学习样本数据,发现规律,得到模型的参数,从而得到能预测目标的模型 | 确定f(X)和其参数的过程 | 确定房价预测函数和具体参数的过程 |
1.4 python和机器学习框架
8个机器学习常用库
Pandas和Num Py提供数据结构,支持数学运算
Matplotlib和Seaborn用于数据可视化
4个库提供算法
Scikit-learn是机器学习框架
简称Sklearn
from sklearn.linear_model import Linear Regression #导入 线性回归算法模型 model = Linear Regression() #使用线性回归算法
Tesnsor Flow、Keras和PyTorch则是深度学习框架
1.5 机器学习项目实战架构
李宏毅老师曾用将大象装进冰箱来比喻机器学习。
- 大象怎么被装进冰箱?这分为3个步骤:打开冰箱门,将大象放进去,关闭冰箱门。
- 机器学习也就是个“三部曲”:选择函数模型,评估函数的优劣,确定最优的函数
机器学习项目的实际过程要更复杂一些,大致分为以下5个环节。
- 问题定义
- 数据的收集和预处理
- 模型(算法)的选择
- 选择机器学习模型
- 超参数调试和性能优化
这5个环节,每一步的处理是否得当,都直接影响机器学习项目的 成败
用MNIST数据集为例
1.5.1 问题定义
要知道机器学习项目到底要解决什么问题
例
- MNIST数据集。这个数据集相当于是机器学习 领域的Hello World,非常的经典,里面包含60 000张训练图像和10 000 张测试图像,都是28px×28px的手写数字灰度图像
- 此处要解决的问题是:将手写数字灰度图像分类为0,1,2,3, 4,5,6,7,8,9,共10个类别。
1.5.2 数据的收集和预处理
1.原始数据的准备
- 自有数据(如互联网公司拥有的大量的客户资料、购物行为历史信息)
- 上网爬取数据
- 各种开源数据网站(Image Net、Kaggle、Google Public Data Explorer,甚至Youtube和维基百科,都是机器学习的重要数据源)
- 购买数据
2.数据的预处理
可视化(visualization)
- 要用Excel表和各种数据分析工具(如前面说的Matplotlib或者Seaborn)从各种角度(如列表、直方图、散点图等)看一看数据。对数据有了基本的了解,才方便进一步分析判 断。
数据向量化(data vectorization)
- 把原始数据格式化,使其变得机器可以读取。例如,将原始图片转换为机器可以读取的数字矩阵,将文字转换为one-hot编码,将文本类别(如男、女)转换成0、1 这样的数值。
处理坏数据和缺失值
- 一笔数据可不是全部都能用,要利用数据处理工具来把“捣乱”的“坏数据”(冗余数据、离群数据、错误数据)处理掉,把缺失值补充上
特征缩放(feature scaling)
- 特征缩放方法有很多,包括数据标准化(standardization)和规范化(normalization)等
- 标准化
- 是对数据特征分布的转换,目标是使其符合正态分布 (均值为0,标准差为1)。因为如果数据特征不符合正态分布的话, 就会影响机器学习效率。在实践中,会去除特征的均值来转换数据, 使其居中,然后除以特征的标准差来对其进行缩放
- 标准化的一种变体是将特征压缩到给定的最小值和最大值之 间,通常为0~1。因此这种特征缩放方法也叫归一化。归一化不会改变数据的分布状态。
- 规范化
- 是将样本缩放为具有单位范数的过程,然后放入机器学习模型,这个过程消除了数据中的离群值
- 标准化
- 在Sklearn的preprocessing工具中可以找到很多特征缩放的方法。 在实战中,要根据数据集和项目特点选择适宜的特征缩放方法。
- 特征缩放方法有很多,包括数据标准化(standardization)和规范化(normalization)等
数据预处理原则
- 全部数据应转换成数字格式(即向量、矩阵、3D、4D、5D)的数组(张量)
- 大范围数据值要压缩成较小值,分布不均的数据特征要进行标准化。
- 异质数据要同质化(homogenous),即同一个特征的数据类型要尽量相同
3.特征工程和特征提取
特征工程和特征提取仍然是在机器对数据集学习之前进行的操作,广义上也算数据预处理。
特征工程是使用数据的领域知识来创建使机器学习算法起作用的特征的过程。特征工程是机器学习的重要环节,然而这个环节实施困难又开销昂贵,相当费时费力。
- 在深度学习时代,对于一部分机器学习问题,自动化的特征学习 可以减少对手动特征工程的需求。但特征工程在另一些机器学习问题 中,仍然是不可或缺的环节。
特征提取(feature extraction)则是通过子特征的选择来减少冗余特征,使初始测量数据更简洁,同时保留最有用的信息。
为什么要对数据的特征进行处理?因为机器学习之所以能够学到 好的算法,关键看特征的质量。那就需要思考下面的问题。
如何选择最有用的特征给机器进行学习?(进行特征提 取。)
如何把现有的特征进行转换、强化、组合,创建出来新的、 更好的特征?(进行特征工程。)
4.载入MNIST数据集
import numpy as np # 导入NumPy数学工具箱
import pandas as pd # 导入Pandas数据处理工具箱
from keras.datasets import mnist #从Keras中导入mnist数据集
#读入训练集和测试集
(X_train_image, y_train_lable), (X_test_image, y_test_lable) = mnist.load_data()
数据向量化的工作MNIST数据集已经为我们做好了,可以直接显 示这些张量里面的内容:
print ("特征集张量形状:", X_train_image.shape) #用shape方法显示张量的形状
print ("第一个数据样本:\n", X_train_image[0]) #注意Python的索引是从0开始的
shape方法显示的是X_train_image张量的形状。灰度图像数据集是 3D张量,第一个维度是样本维(也就是一张一张的图片,共60 000 张),后面两个是特征维(也就是图片的28px×28px的矩阵)。可以发现灰度 信息主要集中在矩阵的中部,边缘部分都是0填充,是图片的背景。数字矩阵的内容差不多如下图所示。
再看一下标签的格式:
print ("第一个数据样本的标签:", y_train_lable[0])
第一个数据样本的标签: 5
上面的数据集在输入机器学习模型之前还要做一些数据格式转换 的工作:
# from keras.utils.np_utils import to_categorical # 导入keras.utils工具箱的类别转换工具
from tensorflow.python.keras.utils.np_utils import to_categorical # 导入keras.utils工具箱的类别转换工具
X_train = X_train_image.reshape(60000,28,28,1) # 给标签增加一个维度
X_test = X_test_image.reshape(10000,28,28,1) # 给标签增加一个维度
y_train = to_categorical(y_train_lable, 10) # 特征转换为one-hot编码
y_test = to_categorical(y_test_lable, 10) # 特征转换为one-hot编码
print ("数据集张量形状:", X_train.shape) # 特征集张量的形状
print ("第一个数据标签:",y_train[0]) # 显示标签集的第一个数据
书上那个 from keras.utils.np_utils import to_categorical # 导入keras.utils工具箱的类别转换工具
会报错
改成上面那个tensorflow.python.keras.utils就
黄佳《零基础学机器学习》chap1笔记相关推荐
- 《零基础学机器学习》笔记-第1课-新手快速上路路径
作者:黄佳 出版社:人民邮电出版社 出版日期:2020年12月 本课代码资源下载:加州房价预测-线性回归模型-python源码.zip 1.1 机器学习的家族图谱 主要包括机器学习快速上手路径.数学和 ...
- 《零基础学机器学习》笔记-第2课-数学和Python知识
2.1 函数描述了事物间的关系 2.2 捕捉函数的变化趋势 2.3 梯度下降是机器学习的动力之源 机器学习,是针对数据集的学习.机器学习相关的程序设计有两大部分:一是对数据的操作,二是机器学习算法的实 ...
- 黄佳《零基础学机器学习》chap3笔记
黄佳 <零基础学机器学习> chap3笔记 第3课 线性回归--预测网店的销售额 文章目录 黄佳 <零基础学机器学习> chap3笔记 第3课 线性回归--预测网店的销售额 3 ...
- 黄佳《零基础学机器学习》chap2笔记
黄佳 <零基础学机器学习> chap2笔记 第2课 数学和Python基础知识 文章目录 黄佳 <零基础学机器学习> chap2笔记 第2课 数学和Python基础知识 2.1 ...
- 集成学习精讲01 - SAP大神黄佳新作《零基础学机器学习》节选
球赛中,防守方的联防策略是非常有效的,几个队员彼此照应,随时协防.换位.补位,护送等,相互帮助,作为一个整体作战,而集成学习,就是机器学习里面的协同作战!如果你训练出一个模型比较弱,又训练出一个模型还 ...
- 集成学习精讲之Boosting - SAP大神黄佳新作《零基础学机器学习》节选
Boosting的意思就是提升,这是一族通过训练弱学习模型的肌肉将其提升为强学习模型的算法.要想在机器学习竞赛中追求卓越,Boosting是一种必须的存在.这是一个属于高手的技术. 图片来源于网上,侵 ...
- 集成学习精讲02 - Bagging方法:多个基模型的聚合(SAP大神黄佳新作《零基础学机器学习》节选)
我们将分为5篇文章介绍集成学习,分别是: 集成学习基础知识:偏差和方差 - 戳此阅读 Bagging - Boosting - 戳此阅读 Stacking/Blending - 戳此阅读 Voting ...
- 零基础学机器学习,看这个就够了!
你好,我是zhenguo 今天推荐我的好兄弟:佳哥,最新出的大作:零基础学机器学习!绝对精品,想要掌握机器学习的不要错过!!! 有没有办法,快速入门机器学习? 其实,在我看来,如今机器学习已经开始&q ...
- 【PM学习笔记】酸梅干超人 - 零基础学Figma学习笔记
原视频链接: B站视频 零基础学Figma学习笔记 心得体会 第1课 - 苹果商店页设计 第2课 - 线性图标设计 第3课 - 面性图标设计 第4课 玻璃拟态页设计 第5课 样式组件功能入门 第6课 ...
最新文章
- 45 MySQL自增id
- HTTPS 建立连接的过程
- 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )
- ubuntu命令创建用户无法登入问题
- 真的不再使用*狗输入法了,改七七拼音
- javamailsender注入失败_Springboot 之 JavaMailSender发送电子邮件
- Mac基础操作:在双显示器设置中将Dock保持在一个屏幕上以防止其移动的方法
- Multisim12\Multisim14访问主数据库失败的解决方法
- 【工具】ColorPix!分享一个超好用的桌面取色工具
- 计蒜客习题:农场看守
- 什么是应用宝统一链接服务器,applink
- RGB565和RGB888的转换
- R语言ggplot2可视化在轴标签中添加上标(Superscript)和下标(subscript)实战
- 音质蓝牙耳机哪款好用?2023公认音质好的四款蓝牙耳机推荐
- 深度学习常用python库学习笔记
- SWFObject 使用 范例版~~~
- oracle的建表语句
- 【服务器数据恢复】RAID5重建初始化失败,数据丢失的数据恢复
- college java (java基础黑皮书)一到四章笔记总结
- php身份证省市县查询
热门文章
- 十多家大厂Android面试真题锦集干货整理,成功拿下大厂offer
- 面试题汇总(基础部分)
- grub引导linux到指定位置,怎样用wingrub引导到LINUX,求助急........
- UE4 安卓打包失败“Build-tool 31.0.0 is missing DX”
- 厉害啦,八万腾讯员工有望拿到专属退休金,这背后意味着什么?
- 【Node】nvm 版本管理工具
- Qt Creator 快捷键
- 嵌入式培训机构背后不为人知的故事
- 本科论文答辩开题报告ppt模板
- 百度开放云·10大解决方案