机器学习课程记录
https://sanzo.top/Default/ml-AndrewNg/【吴恩达机器学习笔记】
https://www.bilibili.com/video/BV1Pa411X76s?p=8&vd_source=becce9837e6a3b9679ed43b6b4adc1a6
Coursera | Online Courses & Credentials From Top Educators. Join for Free
sklearn.preprocessing.StandardScaler — scikit-learn 1.3.0 文档
CLASS1.0824:监督学习和无监督学习
监督学习:数据是标记好的,相当于知道了“答案”,那就可以根据答案不断地去纠正学习

回归算法:从无限多种可能的输出数字中预测数字,比如房价的预测
分类算法:结果类型可以是非数字的,预测输出结果是一组有限的可能输出类别,比如手写数字的识别
无监督学习:散养式,让它自己去探索哪些是有趣的(也就是算法),或者说某些数据中某种结构或模式,通过这样的方式,可以将数据分成不同的集群

聚类算法:能够自动去找到特征比如对每天新闻底部的相关推荐。找到和当前文章有相似词的并把他们归为一类,而人们事先并没有要求它根据什么什么来分,所以要求它在没有监督的情况下自行去找并分类。
线性回归模型:
根据训练集数据点的分布,尽可能地去拟合出一条直线。
输入为单一变量的称为单变量线性回归,多变量就是多元线性回归
CLASS2.0829:数据预处理
1.数据标准化
Q1:我们为什么要对数据进行标准化?既它的作用是?最好是举例子说明,列点我很难直观感受
Q2:我们什么时候会选择使用数据标准化这个操作?
Q3:数据标准化大概的原理和流程,以及具体在代码应用中我们如何操作?即如何去实现它?

1.数据标准化
作用:将数据转换到0值附近,有负的,这一组数据变为均值为0,标准差为1的数据
实现原理:
代码实现:(利用sklearn库)
import numpy as np
import sklearn.preprocessing as sp
# 定义样本数据
raw_samples=np.array([[3.0,-1.0,2.0],
[0.0,4.0,-3.0],
[1.0,-4.0,2.0]]) #二维数据
std_samples = raw_samples.copy()
#复制一个新数据,让原数据保持不变
**std_samples = sp.scale (raw_samples)
输出结果:
==============================
[[ 1.33630621 -0.20203051 0.70710678]
[-1.06904497 1.31319831 -1.41421356]
[-0.26726124 -1.1111678 0.70710678]]
********************************
2.范围缩放
作用:把每一列的数据缩放到0-1之间的数,并使得每一列当中最小的值缩放后为0,每一列当中最大的值缩放后变成1。结果是将原始数据的数值映射到[0,1]区间之间。
具体操作是:先减去最小值(变成0),再对新的一列除以新的一列当中的最大值,完成缩放。
实现原理:

代码实现:(利用sklearn库)
MinMaxScaler详解(inverse_transform)_python_LuckyFucky-华为云开发者联盟 (csdn.net)
import numpy as np
import sklearn.preprocessing as sp
raw_samples = np.array([[1.0,4.0,9.0],
[10.0,16.0,29.0],
[6.0,19.0,67.0]])
#使用sklearn
#根据给定的范围创建一个范围缩放器对象
mms =sp.MinMaxScaler(feature_range=(0,1)) #定义对象(修改范围、观察现象)
#使用范围缩放器实现特征值范围缩放
mms_sapmles=mms.fit_transform(raw_samples) #缩放
print(mms_sapmles)
**输出结果:
==============================
[[0. 0. 0. ]
[1. 0.8 0.34482759]
[0.55555556 1. 1. ]]
********************************
2.数据范围缩放:
3.归一化
4.二值化——第五章,数据转化的哑变量处理
np.round
问题1:关于循环中只对循环
array,存放同一数据类型的数据,可以进行四则运算
CLASS2.0831:numpy基础用法
1.array和列表异同
1.数组相加是矩阵运算里的相加,列表相加是列表拼接
list=[1,3,4]
list2=list + list
list2=[1,3,4,1,3,4]
2.数组内的数据类型需要相同,而列表不用
数组和列表的区别是什么?数组中存储的数据元素类型必须是统一类型
优先级:字符串>浮点型>整数
2.array数组属性

3.array生成特殊数组
#生成一个等差数组
arr1=np.arange(0,1,0.1).reshape(5,2)
arrange--->范围+步长
arr2=np.linspace(0,1,12)
**输出结果:
==============================**
array([[0. , 0.1],
[0.2, 0.3],
[0.4, 0.5],
[0.6, 0.7],
[0.8, 0.9]])
Out[41]: array([0. , 0.25, 0.5 , 0.75, 1. ])
**==============================**
#生成零阵
**zero=np.zeros(4)**
**Out[43]: array([0., 0., 0., 0.])
zero=np.zeros((3,2))
array([[0., 0.],
[0., 0.],
[0., 0.]])**
#生成全是1的阵
**one = np.ones(4)
Out[47]: array([1., 1., 1., 1.])
one=np.ones((2,3))
array([[1., 1., 1.],
[1., 1., 1.]])**
#生成等比数列
arr3=np.logspace(0,2,10)
**array([ 1. , 1.67, 2.78, ..., 35.94, 59.95, 100. ])**
#0表示10的0次幂,2表示10的2次幂
#表示生成10^0~10^2之间10个数构成的等比数列
#生成单位对角阵
np.eye(3)
**Out[52]:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])**
#生成对角阵
#列表里传入的是主元列表
np.diag([3,34,1])
**Out[53]:
array([[ 3, 0, 0],
[ 0, 34, 0],
[ 0, 0, 1]])**
4.随机数生成
data1=***np.random.random(size=12)***
Out[60]: array([0.83, 0.23, 0.34, ..., 0.55, 0.95, 0.59])
np.round(data1,2) #保留两位小数
#size指定形状
#从[0,1)当中随机抽取12个小数出来,如果没有size就返回一个
**np.random.rand(4,5)**
#生成服从[0, 1)之间的均匀分布。
Out[62]:
array([[0.74, 0.19, 0.29, 0.45, 0.14],
[0.44, 0.81, 0.05, 0.13, 0.55],
[0.54, 0.3 , 0.29, 0.53, 0.58],
[0.59, 0.68, 0.82, 0.75, 0.47]])
**np.random.randn(4,5)**
#生成服从标准正态分布的随机数
Out[70]:
array([[-2.32, 0.14, -1.94, -1.76, -0.61],
[-1.1 , 0.41, 1.08, 0.47, 0.85],
[-1.91, 0.71, 1.11, -0.41, 0.21],
[ 0.32, 1.82, -1.11, 0.34, -0.02]])
**np.random.randint(1,100,(5,5))**
#生成1-100之间5行5列的数组
Out[74]:
array([[40, 30, 9, 41, 42],
[70, 32, 49, 67, 57],
[41, 86, 7, 5, 5],
[43, 15, 58, 99, 67],
[62, 9, 69, 31, 37]])
5.数组的索引
一维数组的索引———按照列表索引的方法
#二维数据的索引
CLASS2.0905:numpy-文件读取
1.**保存一个numpy数组并读取**
用np.save()保存成npy格式的文件,用np.load()来读取
import numpy as np
arr = np.arange(10).reshape((2,5))
np.save("test_1",arr)
load_arr=np.load("test_1.npy")
print(load_arr)
2.保存两个numpy数组并读取
用np.savez()保存成npz格式文件,用np.load()读取到的是存储地址,所以用“索引”的方式来读,先用arr.files查看两个小数组的名字,再“索引”读
import numpy as np
arr = np.arange(10).reshape((2,5))
np.save("test_1",arr)
load_arr=np.load("test_1.npy")
print(load_arr)
arr1= np.arange(20).reshape(4,5)
np.savez("test_2",arr,arr1)
load_new=np.load("test_2.npz")
print(load_new.files)
#['arr_0', 'arr_1']
print(load_new['arr_0'])
print(load_new['arr_1'])
3.实例—>复习访问数组(比如要取整组数据中的某些)
推荐收藏 | 最强(全) Matplotlib 可视化实操指南 (qq.com)
损失函数、误差函数:反映真实样本与模型计算的值之间的差异程度。
把损失函数优化到最小。
梯度(导数):函数上升最快的方向。
通常采用梯度下降的方法来寻找损失函数的最小值。
参数更新法则。
符号保证调整方向永远是对的
0914课后作业:回去推导
CLASS2.0919:线性回归模型
梯度下降法:
疑问点一(时间:2023年9月20日16:21:14):梯度,照理来说是和导数的概念是一致的,一元就是导数,二元或者多元就是偏导数,那么也就是某点切线的斜率,也就是该点变化最快的方向,那如果我建立一个三角形,就对不到了
重要:过程性考核
什么是线性回归? 利用线性模型做预测
什么情况下使用线性回归? 样本数据分布大概呈线性分布
如何来实现线性回归?
1.给出一个初始的线性模型 y=kx+b
2.计算损失函数
3.利用梯度下降法来优化线性模型的参数 k , b
4.利用优化好的线性模型做预测
非线性模型包括:多项式模型(多变量)
产生欠拟合的原因:模型复杂度不够,特征太少
产生过拟合的原因:模型过于复杂,特征太多,样本太少
正则化:有离群的样本,用正则化来弱化系数,考虑离群的样本但不完全考虑
超参数:训练之前提前设置好的数,比如学习率,相当于初始值呗
模型参数:模型里面的参数,通过学习得到的,y=wx+b中的w和b,通过学习率获得的。
CLASS2.1010:决策树
决策树:
分类:相同的输入相同的输出,同因同果,根据一系列的属性来判断,
回归:求均值,
如何选择特征:
①信息熵,用来度量样本集合纯度的常用指标。若只有一个类别,熵为0,说明样本很纯
熵值越大说明它越混乱。

P(x)表示一个类别/概率
信息增益:
增益率:信息增益与熵值的比值
基尼系数:表示类别的确定性,值越大,越不确定
每个属性的排列
如何选取特征:决策树构建的每一步,都应该去挑选最优的特征,进行决策对数据集划分效果最好
如何停止分类子节点的构建:
1.当前节点所有样本都属于同一个类别,不需要再划分
2.当前属性集为空,或者所有样本取值相同,无法划分
3.当前节点样本数量少于指定数量(比如说2)
CLASS2.1012:波士顿房价
B401周四下节课波士顿房价的预测
深度学习入门——波士顿房价预测_BarbaraChow的博客-CSDN博客
随机森林
训练集:训练模型
测试集:评估模型
CLASS2.1024:决策树分类预测小汽车等级
机器学习-分类模型-决策树分类预测小汽车等级(7)_我欲乘风归去�的博客-CSDN博客
数据集car -》low,low,4,2,med,med,unacc
low,low,4,2,med,high,unacc
low,low,4,2,big,low,unacc
1.需要把字符串转换成数值型数据,这样才好塞到模型里面计算,使用便签编码
以列为一种类,转换成对应的便签编码
把它转换的规则给存下来(方便后续翻译还原回去) encoder1
先转置,变成行来操作。
low low low
low low low
4 4 4
2 2 2
med med big
med high low
unacc unacc unacc
编码
0,0,0
0,0,0
1,1,1
2,2,2
1,1,2
1,2,0
0,0,0
再转置回去
0,0,1,2,1,1,0
0,0,1,2,1,2,0
0,0,1,2,2,0,0
CLASS2.1026:支持向量机
二分类。SVM最优边界要求。
神经网络—(增加神经元)非线性模型
通过升维变换,从低纬度—》高纬度
线性可分和线性不可分。
将一维的数据空间升级为二维空间,来实现线性可分。升维的本质就是增加特征
2.核函数(用来实现升维)
高斯函数
支持向量机:(important,记住)
1.支持向量机是一个二分类模型
2.寻找一个线性的分类边界(高纬度的话也是分割的超平面)
3.只考虑支持向量(考虑近的那些,离分类边界最近的样本)
4.要求支持向量到边界的距离要最大化。(距离最远)
5.对于线性不可分的问题,通过核函数进行升维变成线性可分的问题。
6.核函数种类:线性核函数,多项式核函数,径向基函数(rtf,高斯)
对于少量的样本,效果会比较好
分类模型的评估,怎么来优化这个模型。调整超参数,网格搜索法,
CLASS2.1031:朴素贝叶斯
typora
应用:自然语言处理,垃圾邮件分类
1.一些概率的概念——联合概率,条件概率,事件的独立性,先验概率(事情未发生求发生的可能性)。后验概率 。
2.贝叶斯定理
3.朴素贝叶斯
朴素指的是事件之间互相独立没有影响。(adj)
+1是确保概率不能是0,+14是为了确保不大于1,加几都行,但是要确保一样
P(a | sports)= (2+1) / 11 +14
来计算不太好统计的概率,比如词频统计
高斯朴素贝叶斯分类器:样本数据是连续的,呈正态分布,
多项式朴素贝叶斯分类器:样本数据是离散的
伯努利朴素贝叶斯分类器:适合特征为二元离散值或者是稀疏的多元离散值的数据集
分类模型的效果和性能(怎么说明模型的好坏)如何优化模型,性能指标
看样本分布情况
模型的评估
模型的优化
聚类
13
CLASS2.1102:模型评估
回归问题用R2评估模型好坏
分类问题:
错误率、精度
针对不同情况下有不同应用背景:
查准率:(查的准不准)
我认为是A的结果全是A(查准率)我认为是C的结果是A(召回率)
召回率:(查的全不全,有多少漏网之鱼)√ 比如疾病感染问题
查对了用T表示,真
查错了用F表示,假
查的结果:正—>P,反—>N
查准率: TP
两者有点矛盾。
推荐系统评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)_召回率公式-CSDN博客
让查准率提高,也就是要提高标准,召回率会更低一点
想让召回率更高,也就是要降低标准,查准率会低
F1得分:
混淆矩阵:
2.训练集和测试集的划分
3.交叉验证法
当样本数量比较少的时候,采用(有点扩大数据集的意思)
把20个,分成五组,每组四个成员,每次选定一个小组作为测试集,其他四组作为训练集,依次轮流,直到每个小组都成为过测试集为止,得到五种结果,取平均值就是。
CLASS2.1107:模型优化
①验证曲线与学习曲线
验证曲线指的是根据不同的评估系数,来评估模型的优劣。
②学习曲线
学习曲线用来评估训练集和测试集如何划分对模型造成的影响
③超参数
在开始学习之前设置值的参数,而不是通过训练得到的参数数据。主要依据经验获得。
超参数选择的方法:随机搜索(参数不固定,随机的),网格搜索(模型参数的组合,相当于一下子确定多个参数的最优解,穷举法)
CLASS2.1109:聚类问题
聚类问题是无监督学习:没有标签,不知道答案
分类问题是有监督学习:有监督问题
①原型聚类,原型相当于一种规则,根据规则来聚类,典型模型:K-Means
②密度聚类,
③层次聚类,
噪声密度
不需要知道类别是多少,随机选一个点,然后做一个圆,把圈进来的归一类。(类似于传销)
支持向量机,每个类别
更多推荐

所有评论(0)