人工智能-机器学习基础

前言:一个还在奋斗的年轻人,我觉得人工智能的函数太多,记不住,为了方便查找,用了老师的笔记,不会的函数可以从本站右上角 在这里插入图片描述搜索 ,很方便,另外想详细了解的,可以从我的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.生成01的数组
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)) # 里面如果有一个缺失值,就返回True
np.all(pd.notnull(movie)) # 里面如果有一个缺失值,就返回False
处理方式:
存在缺失值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 -- 是否进行索引
注意:可以对数据进行对此分组,需要里面传递一个列表进行完成.

人工智能-机器学习基础
https://rodma1.github.io/2020/11/17/programmingLanguage/python/人工智能/人工智能-机器学习基础/
作者
神唱
发布于
2020年11月17日
许可协议