目录
1. 机器学习是什么
2. 机器学习、深度学习和人工智能的区别与联系
3. 机器学习的应用
4. 机器学习分类
4.1 监督学习
4.2 无监督学习
4.3 半监督学习
4.4 强化学习
5. 小练习
5.1 第一题
5.2 第二题
5.3 第三题
1. 机器学习是什么
用老师上课的一张图我们可以用大白话来解释:
大量的数据通过这个学习机器去学习计算,然后获取到一些精华的数据来进行一些猜想,预测或是实践。
e.g:
举个例子,高考,每个人进行大量的题目学习,然后去高考。进行大量的题目学习,就是学习计算,然后获取到了一些精华的数据知识,去高考就是用你所学的数据知识进行实践。人如此,机器也是如此,这也可以应用在机器上面,如果一个机器去经过大量的题目进行学习,机器也可以去参加高考,而且也不会差。
再举个例子,给机器很多的猫狗图片,让这个机器一直看,一直训练学习,那当训练到一定程度的时候,就会让这个机器能认清楚,识别出猫狗的图片了,这也就是机器学习了。如果是过拟合的情况,我们以后再说。
用专业术语来说的话就是
对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E中学习。
2. 机器学习、深度学习和人工智能的区别与联系
今天的深度学习已经是一个广袤的学科领域了。
深度学习是实现机器学习的一种方法
机器学习是实现人工智能的一种途径
3. 机器学习的应用
人脸识别:我们手机上的faceID就是一个机器学习的应用
阿尔法狗:和世界棋手柯洁的切磋
无人驾驶:特斯拉的无人驾驶技术
推荐算法:抖音,头条的推荐算法,根据你的喜好,推荐你感兴趣的内容
等等
4. 机器学习分类
机器学习可分为监督学习,无监督学习,半监督学习,强化学习等等
4.1 监督学习
拥有标签可监督算法不断调整模型,得到输入与输出的映射函数
举个例子:
给你一个已经标注好的数据集,比如猫狗。已经知道这些数据集是猫和狗了,让你去进行学习。根据已给的特征进行学习辨别。去辨认未来一些未知的图像是猫还是狗。
4.2 无监督学习
无标签,通过分析数据本身进行建模,发掘底层信息和隐藏结构。
举个例子:
给你一个数据集,但是你不知道这是什么数据集,可能有猫有狗,也可能有猫有狗有猪,这是不知道的,让你去根据他们的特征的不同去分类。
4.3 半监督学习
部分有标签,部分无标签,并使用这些数据进行模型训练
举个例子:
给你一个数据集,让你知道这个数据集是里面是有猫的,但是只是确定的是猫,还有没有狗和猪。这是未知的。使用大量的未标记,以及同时使用标记的数据去进行模型识别工作。
4.4 强化学习
先行动起来,如果方向正确那么就继续前行,如果错了,吸取经验,好好改正,失败乃成功之母,从头再来就是。
总之要行动,即想要理解信息,得输入到输出的映射,就需要从自身的以往经验中去不断学习来获取知识,从而不需要大量已标记的确定标签,只需要一个评价行为好坏的奖惩机制进行反馈,强化学习通过这样的反馈自己进行学习。(当前行为好以后就多往这个方向发展,如果坏就尽量避免这样的行为,即不是直接得到了标签,而是自己在实际中总结得到的)
5. 小练习
前提:电脑已经有了python环境
安装sklearn
换源安装sklearn
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn scikit-learn
5.1 第一题
生成数据make_circles和make_moons并显示X=400x2,Y={0,1}^400 画图
这个X就是一个400*2的矩阵点,点的第一个是X的值,点第二个是Y的值
Y就是这个400的点的分类,0和1代表决策,一个是内圈一个是外圈。
from sklearn.datasets import make_circles from sklearn.datasets import make_moons import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator fig = plt.figure(1) # 创建一个figure的画图窗口 """ n_samples:整数 生成的总点数,如果是奇数,内圆比外圆多一点 shuffle:布尔变量 是否打乱样本 noise:double或None 将高斯噪声的标准差加入到数据中 random_state:整数 RandomState instance or None,确定数据集变换和噪声的随机数生成。 factor:0 < double < 1 内外圆的半径之比 """ x1, y1 = make_circles(n_samples=400, factor=0.2, noise=0.1) # 生成一个二维的大圆,包含一个小圆 # datasets.make_circles()专门用来生成圆圈形状的二维样本 # factor表示内圈和外圈的半径之比.每圈共有n_samples/2个点 plt.subplot(1, 2, 1) # 一行两列,这个画在第一个 plt.title('data by make_circles()') # 标题 yList = [] for y in y1: if y == 1: y = 'r' # 更改颜色 yList.append(y) else: y = 'b' yList.append(y) x_major_locator = MultipleLocator(0.5) ax = plt.gca() ax.xaxis.set_major_locator(x_major_locator) plt.xlim(-1.4, 1.4) # 设置x轴间隔 plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=yList) # 横纵坐标 plt.tight_layout(pad=4) # 两个图片之间距离 """ n_numbers : 生成样本数量 shuffle : 是否打乱,类似于将数据集random一下 noise : 默认是false,数据集是否加入高斯噪声 random_state : 生成随机种子,给定一个int型数据,能够保证每次生成数据相同。 """ plt.subplot(1, 2, 2) # 一行两列,这个画在第二个 x2, y2 = make_moons(n_samples=400, noise=0.1) x_major_locator2 = MultipleLocator(0.5) ax = plt.gca() ax.xaxis.set_major_locator(x_major_locator2) plt.xlim(-1.4, 2.4) plt.title('data by make_moons()') # 标题 plt.scatter(x2[:, 0], x2[:, 1], marker='o', c=y2) plt.show()
5.2 第二题
高维数据如何可视化?
t-SNE(t-distributedstochastic neighbor embedding )是目前最为流行的一种高维数据降维的算法。
在大数据的时代,数据不仅越来越大,而且也变得越来越复杂,数据维度的转化也在惊人的增加
例如,一组图像的维度就是该图像的像素个数,其范围从数千到数百万。对计算机而言,处理高维数据绝对没问题,但是人类能感知的确只有三个维度,因此很有必要将高维数据可视化的展现出来。那么如何将数据集从一个任意维度的降维到二维或三维呢。
T-SNE就是一种数据降维的算法,其成立的前提是基于这样的假设:尽管现实世界中的许多数据集是嵌入在高维空间中,但是都具有很低的内在维度。也就是说高维数据经过降维后,在低维状态下更能显示出其本质特性。这就是流行学习的基本思想,也称为非线性降维。
将三维的数据编程二维可查看的数据形式。
具体可以查看这一篇博客 高维数据可视化
5.3 第三题
上机器学习数据库,机器学习数据库 ,下载并显示至少一个图像和一个文档的数据集。
import PIL.Image as Image import os IMAGES_PATH = r'D:\\data\\jpg\\' # 图片集地址 IMAGES_FORMAT = ['.jpg', '.JPG'] # 图片格式 IMAGE_SIZE = 1000 # 每张小图片的大小 IMAGE_ROW = 5 # 图片间隔,也就是合并成一张图后,一共有几行 IMAGE_COLUMN = 10 # 图片间隔,也就是合并成一张图后,一共有几列 IMAGE_SAVE_PATH = r'D:\data\data.jpg' # 图片转换后的地址 # 获取图片集地址下的所有图片名称 imageNames = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if os.path.splitext(name)[1] == item] # for x in os.listdir(IMAGES_PATH): # for item in IMAGES_FORMAT: # 简单的对于参数的设定和实际图片集的大小进行数量判断 if len(imageNames) != IMAGE_ROW * IMAGE_COLUMN: raise ValueError("合成图片的参数和要求的数量不能匹配!") # 定义图像拼接函数 def imageCompose(): toImage = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE)) # 创建一个新图 # 循环遍历,把每张图片按顺序粘贴到对应位置上 for y in range(1, IMAGE_ROW + 1): for x in range(1, IMAGE_COLUMN + 1): from_image = Image.open(IMAGES_PATH + imageNames[IMAGE_COLUMN * (y - 1) + x - 1]).resize( (IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS) toImage.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE)) return toImage.save(IMAGE_SAVE_PATH) # 保存新图 if __name__ == '__main__': imageCompose() # 调用函数
输出形式