因为辅修专业,这学期在学习机器学习这门课。
使用的语言为Python,因为Python涉及到库的安装、pip升级等,经常因为源、版本不对等问题导致报错,以前没有做笔记的习惯,遇到问题就上网搜,虽然能解决,但花费不少时间,故首次尝试写下学习笔记,记录学习过程的一些知识及中完成作业的过程中遇到的麻烦,方便个人以后及时找到解决方法,如恰好能帮到你,实属我之荣幸,如有错误,欢迎斧正。
任务安排
1、机器学习导论 8、稀疏表示
2、K-means聚类 9、核方法
3、KNN及其实现 10、高斯混合模型
4、主成成分分析 11、嵌入学习
5、线性判别分析 12、强化学习
6、贝叶斯方法 13、PageRank
7、逻辑回归 14、深度学习
机器学习导论
人工智能核心课程——机器学习
机器学习顶会——国际机器学习大会 ICML
因为我们才第二届,不够成熟,没有配套课本,老师的推荐书籍是《模式识别》——张学工。
———————————————分割线———————————————
1956年,达特茅斯会议的举办,标志人工智能学科的诞生,而机器学习,则起源于人工智能,从第一阶段推理期,研究者们意识到机器仅有逻辑推理能力是远远不够的,到第二阶段知识期,研究者们受困于总结出大量知识再教给系统,后到第三阶段学习期,20世纪90年代中后期,人们淹没在数据海洋中喘息不得,意识到发展自动数据分析技术——机器学习迫在眉睫,机器学习作为“突破知识工程瓶颈”之利器应运而生。
再到如今,机器学习已大量应用于我们生活的方方面面,游戏制作、生物信息学、搜索引擎、入侵检测、无人驾驶、火星机器人、决策助手…
机器学习定义:
对于某类任务 T 和性能度量 P,如果一个计算机程序在 T 上以 P 衡量的性能随着经验 E 而自我完善,那么我们称这个计算机程序在从经验 E 中学习。
简单点说,就是给定一组输入数据集,经过模型训练后,得到相应输出数据集
机器学习分支:
监督学习 Supervised Learning
分类 Classification (离散)
回归 Regression (连续)
降维 Dimensionality Reduction
无监督学习 Unsupervised Learning
密度估计 Density Estimation
聚类 Clustering
降维 Dimensionality Reduction
图像分割 Image Segmentation
弱监督学习 Weakly-supervised Learning
半监督学习 Semi-supervised
介于监督学习与无监督学习之间使用大量的未标记数据,以及同时使用标记数据,来进行模式识别工作
偏监督学习 Partially-supervised
增强学习 Reinforcement Learning
Q-learning
性能度量
—— 衡量真实标签Y和预测标签
之间的距离(X是抽取的数据)
不仅仅是考虑某一个测试数据的标签,而是数据集中任意一个数据
给定一个从所有细胞图片中随机抽取的细胞图片,预测器的平均性能有多好?
(
越小即预测性能越好)
不同情况有不同具体公式,下图仅举例
———————————————分割线———————————————
下面到了重中之重的环节!!!今日作业与过程问题解决!!!
(没想到第一节导论课都能布置作业,感觉才刚认识“机器学习”这个词)
今日任务:低维数据可视化I
1、安装软件Python 和工具包sklearn
2、生成数据make_circles 和 make_moons,并显示
,Y={0,1}
,画图:
3、思考:高维数据如何可视化?
4、上 机器学习数据库下载并显示至少一个图像或文档数据集。
任务解决
1、果不其然,pip又更新了,使用以下代码搞定(会自动安装与已装Python所相符的版本,有时一次没法成功,多跑几次就可以了,具体原因暂时不知道,可能是版本、路径、网络之类的问题,有知道的同学欢迎指教!)
python -m pip install --upgrade pip
下面是配置sklearn
sklearn是scikit-learn的简称,是一个基于Python的第三方模块。sklearn库集成了一些常用的机器学习方法,在进行机器学习任务时,并不需要实现算法,只需要简单的调用sklearn库中提供的模块就能完成大多数的机器学习任务(用Python这种高级语言就是好啊,站在巨人的肩膀上)。
由于它有好几个依赖库,一个一个提前安装挺麻烦的,笔者从别的大佬那找到的一个比较方便的代码(笔者是用pycharm,有的同学说用anaconda直接有自带sklearn)
pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
如果不加后面的清华源,用的外网,速度极其缓慢,载其他的包也是一样的,只需把install和-i之间的包名更改即可
安装好后提示:
可以看到sklearn有三个依赖库 numpy joblib scipy
那么,终于算是解决第一题了!
2、参考sklearn之样本生成(有缺少matplotlib的用上面的命令行配置)
from sklearn.datasets import make_circles
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(1)
x1, y1 = make_circles(n_samples=400, factor=0.5, noise=0.1)
# n_samples:生成样本数,内外平分 noise:异常点的比例 factor:内外圆之间的比例因子 ∈(0,1)
plt.subplot(121)
plt.title('make_circles function example')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=y1)
plt.subplot(122)
x1, y1 = make_moons(n_samples=400, noise=0.1)
plt.title('make_moons function example')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=y1)
plt.show()
效果图
3、高维数据如何可视化?当然是上面提到过的无监督学习里的降维啦,比如人脸识别中用PCA算法降维提取特征脸
4、参考Python把多张图片拼成大图
需要注意的是PTL模块封装在pillow里
这里只需更改IMAGES_PATH和IMAGE_SAVE_PATH即可
注意
1、IMAGES_PATH要到照片集的那一目录下(最后需斜杠)
2、IMAGE_SAVE_PATH最后无斜杠
3、Python数据读取路径比较特殊,\有转义的含义,故有三种表示路径方法
①在路径前面+r ②用一个斜杠替代 ③用两个反斜杠替代
参考unicode error
import PIL.Image as Image
import os
IMAGES_PATH = 'C:/Users/1233/Desktop/Horse100/Horse100/' # 图片集地址
# IMAGES_PATH = r'C:/Users/1233/Desktop/Horse100/Horse100/'
IMAGES_FORMAT = ['.jpg'] # 图片格式
IMAGE_SIZE = 256 # 每张小图片的大小
IMAGE_ROW = 10 # 图片间隔,也就是合并成一张图后,一共有几行
IMAGE_COLUMN = 10 # 图片间隔,也就是合并成一张图后,一共有几列
IMAGE_SAVE_PATH = 'C:\\Users\\1233\\Desktop\\Horse100\\Horse100\\final.jpg' # 图片转换后的地址
# 获取图片集地址下的所有图片名称
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
os.path.splitext(name)[1] == item]
# 定义图像拼接函数
def image_compose():
to_image = 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 + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
(IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)
to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
return to_image.save(IMAGE_SAVE_PATH) # 保存新图
image_compose() # 调用函数
效果图
总结
对于本科的“机器学习”这类较难科目的初学习,我们应该学会站在巨人的肩膀上,先通过做出一些有趣的东西培养兴趣,再兴趣使然,不断深入,以及,感谢前辈们的资源!