前言:一个还在奋斗的年轻人,我觉得人工智能的函数太多,记不住,为了方便查找,用了老师的笔记,不会的函数可以从本站右上角
搜索 ,很方便,另外想详细了解的,可以从我的github中了解。
一 .机器学习概述
1.1 人工智能概述
1.人工智能起源
图灵测试
达特茅斯会议
2.人工智能三个阶段
1980年代是正式成形期
1990-2010年代是蓬勃发展期
2012年之后是深度学习期
3.人工智能、机器学习和深度学习
机器学习是人工智能的一个实现途径
深度学习是机器学习的一个方法发展而来
4.主要分支介绍
1.计算机视觉
eg:人脸识别
2.自然语言处理
语音识别
语义识别
3.机器人
5.人工智能必备三要素
数据
算法
计算力
6.gpu,cpu
gpu -- 计算密集型
cpu -- IO密集型
1.2 机器学习工作流程
1.定义
数据
自动分析获得模型
预测
从数据中自动分析获得模型,并利用模型对未知数据进行预测
2.工作流程
1.获取数据
2.数据基本处理
3.特征工程
4.机器学习(模型训练)
5.模型评估
3.获取到的数据集介绍
1.专有名词
样本
特征
目标值(标签值)
特征值
2.数据类型构成
类型一:特征值+目标值
目标值分为是离散还是连续
类型二: 只有特征值,没有目标值
3.数据划分
训练数据(训练集) -- 构建模型
0.7--0.8
测试数据(测试集) -- 模型评估
0.2--0.3
4.数据基本处理
对数进行缺失值、去除异常值等处理
5.特征工程
1.定义
把数据转换成为机器更容易识别的数据
2.为什么需要特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
3.包含内容
特征提取
特征预处理
特征降维
6.机器学习
选择合适的算法对模型进行训练
7.模型评估
对训练好的模型进行评估
1.3 机器学习算法分类
1.监督学习 -- 有特征值,有目标值
目标值连续-- 回归
目标值离散-- 分类
2.无监督学习 -- 仅有特征值
3.半监督学习
有特征值,但是一部分数据有目标值,一部分没有
4.强化学习
动态过程,上一步数据的输出是下一步数据的输入
四要素:agent, action, environment,Reward,
1.4 模型评估
1.分类模型评估
准确率
精确率
召回率
F1-score
AUC指标
2 回归模型评估
均方根误差
相对平方误差
平均绝对误差
相对绝对误差
决定系数
3.拟合
欠拟合
过拟合
二. 机器学习基础环境安装与使用
2.1 库的安装
1
| pip install -r requirements.txt
|
2.2 Jupyter Notebook使用
1.jupyter定义
开源的科学计算平台
类比ipython
可以运行代码,可以做笔记
文件后缀: .ipynb
2.jupyter和pycharm对比
jupyter -- 探索性数据,一边分析,一边运行
pycharm -- 适合逻辑性强的操作(web)
3.如何使用
jupyter notebook
使用方式和ipython一样,但是要比ipython强大(可以画图)
4.cell
一对In Out会话被视作一个代码单元,称为cell
5.jupyter两种模式
编辑模式
直接点击进去,可以进行编写代码,做笔记
命令模式
通过快捷键,操作,eg:添加一行
6.快捷键
通用:
Shift+Enter,执行本单元代码,并跳转到下一单元
Ctrl+Enter,执行本单元代码,留在本单元
命令模式
Y,cell切换到Code模式
M,cell切换到Markdown模式
A,在当前cell的上面添加cell
B,在当前cell的下面添加cell
双击D:删除当前cell
编辑模式:
和常规方式一样
7.markdown语法
# -- *级标题
- -- 缩进
三 . Matplotlib
3.1 Matplotlib之HelloWorld
1.定义
主要用于开发2D图表(3D)
数据分析,基于分析,进行展示
2.绘图流程【***】
1.创建画布
2.绘制图像
3.显示图像
3.matplotlib三层结构
容器层
canvas
figure
axes
辅助显示层
添加x轴,y轴描述,标题。。。
图像层
绘制什么图像的声明
3.2 折线图(plot)与基础绘图功能
1.图像保存
plt.savefig()
注意:图像保存一定要放到show前面
2.添加x轴,y轴刻度
plt.xticks
plt.yticks
注意:第一个参数必须是数字,如果不是数字,需要进行值替换
3.添加网格
plt.grid()
参数:
linestyle -- 绘制网格的方式
alpha -- 透明度
4.添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("一小时温度变化图", fontsize=20)
5.多次plot
直接进行绘制
6.显示图例
plt.legend()
注意:需要在显示之前,声明plot里面的具体值
7.多个坐标系图像显示【###】
fig, axes = plt.subplots()
nrows -- 几行
ncols -- 几列
注意:有些方法需要添加set_*
8.折线图应用场景
1.表示数据变化
2.绘制一些数学图像
3.3 常见图形绘制
1 2 3 4 5 6 7 8 9 10
| 1.折线图 -- plt.plot 变化 2.散点图 -- plt.scatter() 分布规律 3.柱状图 -- plt.bar 统计、对比 4.直方图 -- plt.hist() 统计,分布 5.饼图 -- plt.pie() 占比
|
四. Numpy
4.1 Numpy优势
1 2 3 4 5 6 7 8 9 10
| 1.定义 开源的Python科学计算库, 用于快速处理任意维度的数组 Numpy中,存储对象是ndarray 2.创建 np.array([]) 3.numpy的优势 内存块风格 -- 一体式存储 支持并行化运算 效率高于纯Python代码 -- 底层使用了C,内部释放了GIL
|
4.2 N维数组-ndarray
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 1.ndarray的属性 属性名字 属性解释 ndarray.shape 数组维度的元组 ndarray.ndim 数组维数 ndarray.size 数组中的元素数量 ndarray.itemsize 一个数组元素的长度(字节) ndarray.dtype 数组元素的类型 2.ndarray的形状 np.array() 三维数组不好理解 -- excel中有多个sheet 3.ndarray的类型 bool int float str ... 注意:若不指定,整数默认int64,小数默认float64
|
4.3 基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| 1 生成数组的方法 1.生成0和1的数组 np.ones() np.ones_like() 2.从现有数组中生成 np.array -- 深拷贝 np.asarray -- 浅拷贝 3.生成固定范围数组 np.linspace() nun -- 生成等间隔的多少个 np.arange() step -- 每间隔多少生成数据 np.logspace() 生成以10的N次幂的数据 4 生成随机数组 1.均匀分布生成 np.random.uniform() low high size 2.正态分布 均值,方差 均值 -- 图形的左右位置 方差 -- 图像是瘦,还是胖 值越小,图形越瘦高,数据越集中 值越大,图形越矮胖,数据越分散 3.正态分布api np.random.normal() low high size 2.数组的索引、切片 直接索引 先对行进行索引,再进行列索引 -- [*, 高维数组索引,从宏观到微观 3.形状修改 1.对象.reshape 不进行行列互换,产生新变量 2.对象.resize 不进行行列互换,对原值进行更改 3.对象.T 进行行列互换 4.类型修改 对象.astype() 5.数组去重 np.unique()
|
4.4 ndarray运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 1.逻辑运算 大于,小于直接进行判断 赋值:满足要求,直接进行赋值 2.通用判断函数 np.all() 所有满足要求,才返回True np.any() 只要有一个满足要求,就返回True 3.三元运算符 np.where() 满足要求,赋值第一个值,否则赋值第二个值 np.logical_and() 并 np.logical_or() 或 4.统计运算 min max midian mean std -- 标准差 var -- 方差 argmax -- 最大值下标 argmin -- 最小值下标
|
4.5 矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 1.矩阵和向量 矩阵:理解-二维数组 向量:理解-一维数组 2.加法和标量乘法 加法: 对应位置相加 乘法: 标量和每个位置的元素相乘 3.矩阵向量(矩阵)乘法 [M行, N列]*[N行, L列] = [M行, L列] 4.矩阵乘法性质 1.满足结合律,不满足交换律 5.单位矩阵 对角线为1,其他位置为0的矩阵 6.逆 矩阵A*矩阵B=单位矩阵I 那么A和B就互为逆矩阵 7.转置 行列互换
|
4.6 数组间运算
1 2 3 4 5 6 7 8 9 10
| 1.数组和数字是直接可以进行运算 2.数组和数组 需要满足广播机制 维度相同 shape对应位置为1 3.矩阵乘法api np.dot --点乘 np.matmul -- 矩阵相乘 注意:两者之间在进行矩阵相乘时候,没有区别 但是,dot支持矩阵和数字相乘
|
五 .Pandas
5.1Pandas介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| 1.pandas概念 开源的数据挖掘库 用于数据探索 封装了matplotlib,numpy 2.案例知识点 1.创建DataFrame pd.DataFrame(ndarray) 2.创建日期 pd.date_range() start -- 开始日期 end -- 结束日期 periods -- 时间跨度 freq -- 统计时间方式 3.DataFrame介绍 -- 类比二维数组[***] 1.dataframe属性 对象.shape 对象.index 对象.columns 对象.values 对象.T 对象.head() 对象.tail() 2.dataframe设置索引 1.修改行列索引 必须整行或者整列去进行修改 2.重设索引 对象.reset_index() 3.设置新索引 对象.set_index() 如果设置索引是两个的时候就是multiIndex 4.MultiIndex和panel -- 类比三维数组[**] 1.MultiIndex 对象.index 对象.index.names 2.panel -- 已经弃用,了解 直接没法进行查看里面的值,需要通过索引获取 对象[:, :, ""] 5.Series -- 一维数组[**] 1.创建 通过ndarray创建 指定索引创建 通过字典创建 2.属性 对象.index 对象.values
|
5.2 基本数据操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1.索引操作 1.直接 -- 先列后行 2.loc -- 先行后列,索引值 3.iloc -- 先行后列,索引值的下标 4.ix -- 先行后列,混合索引 2.赋值操作 1.对象[""] 2.对象.close 3.排序 1.dataframe 对象.sort_values() by -- 按照什么排序 ascending -- 升降序 对象.sort_index() 注意:by这个参数可以接受多个值,优先按照第一个索引排序,如果相同,按照后面的 2.series 对象.sort_values() 对象.sort_index()
|
5.3 DataFrame运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 1.算术运算 直接使用方法, add, sub ... 也可以用符号 2.逻辑运算 2.1 逻辑运算符号<、 >、|、 & 直接判断 2.2 逻辑运算函数 对象.query("") 对象.isin([]) 3.统计函数 对象.describe() 统计函数 sum mean ... mode -- 众数 idxmax -- 最大值的索引 idxmin -- 最小值的索引 4.累计统计函数 函数 作用 cumsum 计算前1/2/3/…/n个数的和 cummax 计算前1/2/3/…/n个数的最大值 cummin 计算前1/2/3/…/n个数的最小值 cumprod 计算前1/2/3/…/n个数的积 5.自定义运算[***] apply(func, axis=) func -- 自己定义的函数
|
5.4 Pandas画图
1 2 3 4 5 6 7 8
| 对象.plot() kind -- line -- 折线图 bar barh -- 条形图旋转 hist pie scatter
|
5.5 文件读取与存储
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 1.csv 1.读取-- pd.read_csv 参数: usecols -- 需要哪列 2.存储 -- 对象.to_csv 参数: columns -- 保存哪列 2.hdf 1.读取 -- pd.read_hdf() 2.写入 -- 对象.to_hdf() 注意:保存文件是****.h5 3.json 1.读取 -- pd.read_json() 2.写入 -- 对象.to_josn() 参数: orient -- 按照什么方式进行读取或者写入 lines -- 是否按照行读取和写入 4.推荐使用hdf 1.压缩方式,读取效率快 2.压缩后,节省空间 3.支持跨平台
|
5.6 高级处理-缺失值处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 判断数据是否为NaN: np.any(pd.isnull(movie)) np.all(pd.notnull(movie)) 处理方式: 存在缺失值nan,并且是np.nan: 1、删除存在缺失值的:dropna(axis='rows') 注:不会修改原数据,需要接受返回值 2、替换缺失值:fillna(value, inplace=True) value:替换成的值 inplace:True:会修改原数据,False:不替换修改原数据,生成新的对象 不是缺失值nan,有默认标记的 对象.replace() to_replace -- 替换前的值 value -- 替换后的值
|
5.7 高级处理-数据离散化
1 2 3 4 5 6 7 8 9 10 11 12
| 1.什么是数据离散化 把一些数据分到某个区间,最后用不同的符号或者数字表达 2.数据离散化api pd.qcut() -- 把数据大致分为数量相等的几类 pd.cut() -- 指定分组间隔 数量统计: 对象.value_counts() 3.one-hot编码 就是把数据转换成为0,1统计类型 别名:哑变量,热独编码 api: pd.get_dummies()
|
5.8 高级处理-合并
1 2 3 4 5 6 7
| pd.concat() axis= pd.merge() left -- 左表 right -- 右表 on -- 指定键 how -- 按照什么方式进行拼接
|
5.9 高级处理-交叉表与透视表
1 2 3 4 5 6
| 1.什么交叉表,透视表 就是探索两列数据之间的关系 2.pd.crosstab() 返回具体数量 3.对象.pivot_table() 返回占比情况
|
5.10 高级处理-分组与聚合
1 2 3 4
| 1.api 对象.groupby() 参数:as_index -- 是否进行索引 注意:可以对数据进行对此分组,需要里面传递一个列表进行完成.
|