机器学习全面总结

0 阅读21分钟

机器学习全面总

人工智能的三大概念

三大概念包含:人工智能,机器学习,深度学习

人工智能就是仿智,使用计算机来模拟和代替人类,机器学习就是利用机器自动学习,不用人为硬编码一些规则。

深度学习是一种大脑仿生,设计一层一层的神经元模拟万事万物,三者的关系其实是

image.png 机器学习是人工智能实现的一种途径, 深度学习是机器学习的一种方法发展而来的, 机器学习其实更是基于传统的统计学而来的, 深度学习是一种基于神经网络的仿生深度学习方法。

机器学习的应用领域和发展史

机器学习的应用领域主要包含图像识别,语音识别,数据挖掘,智能翻译,医疗智能诊断。

机器学习发展的三要素,算法,算力,数据。

机器学习的发展史主要包含几个历史阶段,上个世纪,50年代-70年代,主要是专家系统主导,比如图灵设计国际象棋程序,到80年代后,开始用统计学解决模型问题,1997年的IBM深蓝战胜卡斯帕罗夫,进入21世纪,逐步进入神经网络时代,2016年的alphago战胜李世石,进入2017年后,谷歌提出了transformer架构,再到今天的大模型遍地开花

机器学习里的常用术语

样本,特征,标签/目标值,数据集划分

一行数据就是一个样本,多个样本组成了数据集,一列数据就是这个样本的一个特征,或者叫属性,标签则是这行数据最终要预测的一个目标值,数据集划分则通常是按8:2 或者 7:3划分训练集和测试集

机器学习的算法分类

机器学习的分类主要划分为4种 有监督学习 无监督学习 半监督学习 强化学习

有监督学习:输入数据都是由特征值和目标值组成,即输入的训练数据是有标签的 有监督学习又可以分为 分类问题和回归问题,其中分类的标签值是不连续的,而回归的标签值是连续的

无监督学习:是指输入数据是特征值,但是没有目标值,也就是没有标签,根据样本之间的相似性来判断分类聚类,以发现事物内部的一个结构以及相互关系,很典型的场景就是早期的抖音用户画像,基本都是按照无监督学习,物以类聚,人以群分

半监督学习:部分样本有标签,部分数据没有标签,通过有标签的数据去预测无标签的数据,优点是大幅降低标记成本

强化学习: 智能体不断与环境交互,通过获取最大奖励的方式来获得最佳策略,获得更多奖励,进行一系列的决策,包含四个元素,agent智能体 environment环境 action行动 reward奖励

机器学习的建模流程

建模流程一般包括:

获取数据 搜集完成机器学习任务相关的数据,包括一些经验数据,图像数据,文本数据,音频数据等等

数据的基本处理 正常情况下包含一些异常值的处理,数据缺失值的处理等

特征工程 特征工程一般是指 对数据的一些特征进行提取,转成向量,让模型达到最好的效果,将一些与结果无关的特征去除,特征提取,预处理,归一化,标准化,或者特征降维等

机器学习训练 选择合适的算法对模型进行训练,例如 线性回归,逻辑回归,决策树,集成学习 聚类等

机器学习模型评估 评估效果好的模型进行上线,否则继续重复上述步骤,回归评测指标,分类评测指标,聚类评测指标

机器学习三种类别评估的本质区别

  • 回归:预测连续值,衡量预测值与真实值的偏差大小

image.png

  • 分类:预测离散类别,衡量分类的正确率与精准度

image.png

  • 聚类:无监督分组,衡量簇内紧密性 + 簇间分离度

image.png

三种类别的案例

回归

image.png

导入依赖包:from sklearn.linear_model import LinearRegression

准备数据: x=[[80,86],[82,80],[85,78],[90,90],[86,82]........] y=[84.2, 80.6, 80.1, 90.....]

实例化线性回归模型:estimator = LinearRegression()

模型训练: estimator.fit(x,y) print('回归系数',estimator.coef_) print('截距项',estimator.intercept_)

模型预测:mypred = estimator.predict([[90,80]])

分类

image.png

导入依赖包:from sklearn.neighbors import KNighborsclassifier

准备数据:

image.png

实例化KNN模型: estimator = KNighborsclassifier()

模型训练: estimator.fit(x,y)

模型预测: mypre = estimator.predict([[23,3,17]])

聚类

image.png

导入依赖包:

image.png

准备数据:

image.png

实例化kmeans

image.png

模型训练预测以及展示结果

image.png

模型评估

image.png

什么是模型拟合问题?

拟合的概念 是机器学习领域用来评估模型对样本点的拟合情况

欠拟合 是指模型在训练集表现不好,在测试集表现也很差,原因是模型过于简单,解决办法一般是 增加特征

过拟合 是指模型在训练集表现很好,在测试集表现很差,原因是 模型过于复杂,数据不纯,训练的样本数据太少,解决办法一般是 正则化,异常值检测,特征降维等

获取数据

API
	pandas.read_csv()
	sklearn.datasets.load_iris()
	.........
数据集
	样本
	特征
	目标值/标签
数据集划分
	训练集/测试集
            from sklearn.model_selection import train_test_split
            x_train,x_test,y_train,y_test = train_test_split(data, target, test_size=0.2)

	交叉验证
		from sklearn.model_selection import GridSearchCV
                    estimator = GridSearchCV(model, param_grid, cv=5)
    数据分析  一般指 EDA数分                               

		

特征工程

定义
	利用专业背景知识和技巧处理数据,让机器学习算法效果最好。这个过程就是特征工程
	包含特征提取、特征预处理、特征降维、特征选择、特征组合
特征提取
	从原始数据中提取与任务相关的特征
特征预处理
	特征对模型产生影响;因量纲问题,有些特征对模型影响大、有些影响小
特征降维
	Why?
		特征对训练模型时非常重要的;用于训练的数据集包含一些不重要的特征,可能导致模型泛化性能不佳
	作用
		在某些限定条件下,降低特征个数
	基本方法
		低方差过滤法
			指的是删除方差低于某些阈值的一些特征
				特征方差小:特征值的波动范围小,包含的信息少,模型很难学习到信息,特征方差大:特征值的波动范围大,包含的信息相对丰富,便于模型进行学习
			API
				sklearn.feature_selection.VarianceThreshold(threshold = 0.01)  
				
			案例
				
		PCA(主成分分析)降维法
			(Principal Component Analysis) m通过对数据维数进行压缩,尽可能降低原数据的维数(复杂度)损失少量信息,在此过程中可能会舍弃原有数据、创造新的变量
			API
				sklearn.decomposition.PCA(n_components=None)  
				
			案例
				
		相关系数法
			通过反映特征列之间(变量之间)密切相关程度的相关系数指标来对数据进行降维
			相关系数性质
				
			相关系数类型
				皮尔逊相关系数
					
				斯皮尔曼相关系数
					
					n为等级个数,d为成对变量的等级差数
			案例
				
				显著性 :必然性
特征选择
	原始数据特征很多,但是对模型训练相关是其中一个特征集合子集。
特征组合
	把多个的特征合并成一个特征。一般利用乘法或加法来完成

模型训练

算法类型【有无标签】

有监督学习标签值连续的 分为回归算法

KNN

1-KNN
	1.KNN算法概述
		K Nearest Neighbor,K-近邻算法
		算法思想
			如果一个样本在特征空间中的 k 个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别 
		K值选择
			K值过小
				容易受到异常点的影响,K值的减小就意味着整体模型变得复杂,容易发生过拟合
			K值过大
				受到样本均衡的问题,且K值的增大就意味着整体的模型变得简单,欠拟合
		算法流程
			分类
				1.计算未知样本到每一个训练样本的距离
                                2.将训练样本根据距离大小升序排列
                                3.取出距离最近的 K 个训练样本
                                4.进行多数表决,统计 K 个样本中哪个类别的样本个数最多
                                5.将未知的样本归属到出现次数最多的类别
			回归
				1.计算未知样本到每一个训练样本的距离
                                2.将训练样本根据距离大小升序排列
                                3.取出距离最近的 K 个训练样本
                                4.把这个 K 个样本的目标值计算其平均值
                                5.将上述平均值作为将未知的样本预测的值
	2.KNN算法API
		分类API
			sklearn.neighbors.KNeighborsClassifier(n_neighbors=5) 
			n_neighbors:int,可选(默认= 5),n_neighbors查询默认使用的邻居数
		回归API
			sklearn.neighbors.KNeighborsRegressor(n_neighbors=5)
	3.常用距离度量
		1.欧氏距离(Euclidean Distance)
			
			
		2.曼哈顿距离(Manhattan Distance)
			
			
		3.切比雪夫距离(Chebyshev Distance)
			
			
		4.闵可夫斯基距离(Minkowski Distance)  
			
	4.特征预处理
		为什么做归一化和标准化?
			特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些模型(算法)无法学习到其它的特征。
		归一化
			通过对原始数据进行变换把数据映射到【mi,mx】(默认为[0,1])之间
			
			应用场景
				最大值与最小值非常容易受异常点影响,鲁棒性较差,只适合传统精确小数据场景
			API
				sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
				feature_range 缩放区间
                                fit_transform(X) 将特征进行归一化缩放
		标准化
			通过对原始数据进行标准化,转换为均值为0标准差为1的标准正态分布的数据
			
			应用场景
				适合现代嘈杂大数据场景。
			API
				sklearn.preprocessing. StandardScaler()
				fit_transform(X) 将特征进行标准化缩放
                        拓展:正态分布
			也称高斯分布,钟形分布。正态分布记作N(μ,σ**2 )μ决定了其位置,其标准差σ决定了分布的幅度,当μ = 0, σ = 1时的正态分布是标准正态分布
			3σ法则(68-95-99.7 法则)
				
				
		案例:KNN算法实现鸢尾花分类  
			1 获取数据集
				from sklearn.datasets import load_iris
mydataset = load_iris()
				信息获取
					查看数据集信息
						mydataset.data[:5]
					查看目标值
						mydataset.target
					查看目标值名字
						mydataset.target_names
					查看特征名
						mydataset.feature_names
					查看数据集描述
						mydataset.DESCR
					数据文件路径
						mydataset.filename
			2 数据基本处理
				切分数据集
					from sklearn.model_selection import train_test_split
                                        X_train, X_test, y_train, y_test =  train_test_split(mydataset.data, mydataset.target, test_size=0.3, random_state=22)
			3 特征工程
				数据集标准化
					from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
X_train = transfer.fit_transform(X_train)
X_test = transfer.transform(X_test)
			4 模型训练
				from sklearn.neighbors import KNeighborsClassifier
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(X_train, y_train)
				
			5 模型评估
				
	5.超参数选择方法
		交叉验证
			定义:一种数据集的分割方法,将训练集划分为 n 份,拿一份做验证集(测试集)、其他n-1份做训练集 
			
			目的:为了得到更加准确可信的模型评分
		网格搜索
			定义:手动产生很多超参数组合,来训练模型
			只需要将若干参数传递给网格搜索对象,它自动帮我们完成不同超参数的组合、模型训练、模型评估,最终返回一组最优的超参数。
			交叉验证+网格搜索方法
				1.交叉验证解决模型的数据输入问题(数据集划分)得到更可靠的模型
2.网格搜索解决超参数的组合
3.两个组合再一起形成一个模型参数调优的解决方案
		交叉验证网格搜索API函数
			from sklearn.model_selection import GridSearchCV
estimator = GridSearchCV(estimator=estimator, param_grid=param_grid, cv=5)
			结果查看
				最优分数
					estimator.best_score_
				最优估计器
					estimator.best_estimator_
				最优超参数组合
					estimator.best_params_
				交叉验证结果
					estimator.cv_results_
		交叉验证网格搜索进行模型超参数调优
			
		案例:KNN算法实现手写数字识别
			数据集
				MNIST手写数字识别 
1999年发布,成为分类算法基准测试的基础
MNIST仍然是研究人员和学习者的可靠资源
				需求:从数万个手写图像的数据集中正确识别数字
				
			数据预处理
				
			模型训练
				
			模型测试
				
	图像及三维数组切片
		

逻辑回归

2-逻辑回归
	逻辑回归简介
		应用场景
			预测疾病 (是阳性、不是阳性)
			银行信任贷款(放贷、还是不放贷)
			情感分析 (正面、负面)
			预测广告点击率 (点击、不点击)
		数学知识
			sigmoid函数
				
				
				
			概率
				概率 
					事件发生的可能性
				联合概率 
					 指两个或多个随机变量同时发生的概率
				条件概率
					表示事件A在另外一个事件B已经发生条件下的发生概率,P(a|b)
			极大似然估计
				核心思想:根据观测到的结果来估计模型算法中的未知参数
			对数函数
				
				
				对数的性质
					
	逻辑回归原理
		概念
			
		基本思想
			
		假设函数
			
		损失函数
			
				1.单样本概率表示
					
				2.多样本概率表示
					
				3.极大似然函数转对数似然函数
					
				4.使用梯度下降优化算法更新参数
			二分类交叉熵损失函数
	逻辑回归API函数和案例 
		sklearn.linear_model.LogisticRegression(solver='liblinear', penalty=‘l2’, C = 1.0)
		
		案例:癌症分类预测
			1.获取数据 
				data = pd.read_csv(‘./data/breast-cancer-wisconsin.csv’)    
print(data.info)
			2.基本数据处理 
				2.1 缺失值处理  
					data = data.replace(to_replace=“?”, value=np.NaN)
data = data.dropna()
				2.2 确定特征值,目标值 
					x = data.iloc[:, 1:-1]
print(‘x.head()-->\n’, x.head())
y = data[“Class”]
print(‘y.head()-->\n’, y.head())
				2.3 分割数据
					x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)
			3.特征工程(标准化) 
				transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
			4.机器学习(逻辑回归) 
				estimator = LogisticRegression()
estimator.fit(x_train, y_train)
			5.模型评估
				y_predict = estimator.predict(x_test)
print(‘y_predict-->’, y_predict)
accuracy = estimator.score(x_test, y_test)
print(‘accuracy-->’, accuracy)  
	分类问题评估*
		混淆矩阵 
			
				TP,True Positive
					真正例,真实值是 正例 的样本中,被分类为 正例 的样本数量有多少
				FN,False Negative
					伪反例,真实值是 正例 的样本中,被分类为 假例 的样本数量有多少
				FP,False Positive
					伪正例,真实值是 假例 的样本中,被分类为 正例 的样本数量有多少
				TN,True Negative
					真反例,真实值是 假例 的样本中,被分类为 假例 的样本数量有多少
		精确率(Precision) 
			查准率,对正例样本的预测准确率。
			
				
			
		召回率(Recall) 
			查全率,指的是预测为真正例样本占所有真实正例样本的比重
			
				
			
		F1-score
			综合模型的精度、召回率来评估预测能力
			
			
		ROC曲线
			基本概念
				TPR(True Positive Rate)
					真正率,正样本中被预测为正样本的概率
				FPR(False Positive Rate)
					假正率,负样本中被预测为正样本的概率 
			一种常用于评估分类模型性能的可视化工具。
ROC曲线以模型的真正率TPR为纵轴,假正率FPR为横轴
它将模型在不同阈值下的表现以曲线的形式展现出来。
			
		AUC指标
			AUC (Area Under the Curve) : ROC曲线下面积
			
			API
				AUC api
					from sklearn.metrics import roc_auc_score
sklearn.metrics.roc_auc_score(y_true, y_score)
						
				分类评估报告api
					sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )
					
	电信客户流失预测案例
		1.需求分析
			
		2.数据基本处理
			
			
		3.特征筛选
			
			
		4.模型训练
			
			
		5.模型预测
			
			

决策树

3-决策树
	决策树简介
		定义
			一种树形结构
			树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果
		建立过程
			1.特征选择:选取有较强分类能力的特征。
			2.决策树生成:根据选择的特征生成决策树。
			3. 决策树也易过拟合,采用剪枝的方法缓解过拟合。
	ID3决策树 
		基本概念
			熵 Entropy 
				信息论中代表随机变量不确定度的度量
				熵越大,数据的不确定性越高,信息就越多
熵越小,数据的不确定性越低
			信息熵
				
				
			信息增益
				定义
					特征a对训练数据集D的信息增益g(D,a),定义为集合D的熵H(D)与特征a给定条件下D的熵H(D|a)之差。
				公式
					
					
		ID3决策树构建过程
			1.计算每个特征的信息增益
			2.使用信息增益最大的特征将数据集  拆分为子集
			3.使用该特征(信息增益最大的特征)作为决策树的一个节点
			4.使用剩余特征对子集重复上述(123)过程
		结论:信息增益越大,特征越重要
	C4.5决策树
		解决问题:ID3树的不足,偏向于选择种类多的特征作为分裂依据
		公式
			信息增益率 = 信息增益 /特征熵
			
			
		结论:信息增益率越大,特征对决策的影响越大
	CART决策树
		定义
			(Classification and Regression Tree),一种决策树模型,它即可以用于分类,也可以用于回归
			Cart回归树使用平方误差最小化策略,
Cart分类生成树采用的基尼指数最小化策略。
		基本概念
			基尼值Gini(D)
				从数据集D中随机抽取两个样本,其类别标记不一致的概率。
				Gini(D)值越小,数据集D的纯度越高。
				
			基尼指数Gini_index(D)
				选择使划分后基尼系数最小的属性作为最优化分属性。
				
		结论:基尼指数值越小(CART),则说明优先选择该特征
	三种决策树对比
		
		决策树API
			sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)
			
	案例泰坦尼克号生存预测 
		1.需求分析
			利用泰坦尼克号遇难和幸运数据(乘坐班次、年龄、性别),运用机器学习工具来预测哪些乘客可幸免于悲剧
		2.导入依赖包
			
		3.获取数据
			
		4.数据预处理
			1.确定特征和目标值
				
			2.缺失值处理
				
			3.类别型数据转one-hot
				
			4.数据集划分
				
		5.模型训练
			
		6.模型预测
			
		7.模型评估
			1.预测准确率
				
			2.分类报告
				
		8.决策树可视化
			
	CART回归树
		1.CART 回归树和 CART 分类树区别
			
		2.CART回归树的分裂依据
			平方损失
			
		3.CART回归决策树构建过程
			1 选择一个特征,将该特征的值进行排序,取相邻点计算均值作为待划分点
			2 根据所有划分点,将数据集分成两部分:R1、R2
			3 R1 和 R2 两部分的平方损失相加作为该切分点平方损失
			4 取最小的平方损失的划分点,作为当前特征的划分点
			5 以此计算其他特征的最优划分点、以及该划分点对应的损失值
			6 在所有的特征的划分点中,选择出最小平方损失的划分点,作为当前树的分裂点
	决策树剪枝
		定义
			一种防止决策树过拟合的一种正则化方法;提高其泛化能力。
把子树的节点全部删掉,使用用叶子节点来替换
		剪枝方法
			预剪枝
				在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点;
				优缺点
					优点
						预剪枝使决策树的很多分支没有展开,不单降低了过拟合风险,还显著减少了决策树的训练、测试时间开销
					缺点
						有些分支的当前划分虽不能提升泛化性能,但后续划分却有可能导致性能的显著提高;
预剪枝决策树也带来了欠拟合的风险
			后剪枝
				先从训练集生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换为叶节点。
				优缺点
					优点
						比预剪枝保留了更多的分支。一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝
					缺点
						后剪枝先生成,后剪枝。自底向上地对树中所有非叶子节点进行逐一考察,训练时间开销比未剪枝的决策树和预剪枝的决策树都要大得多。

集成学习

4-集成学习
	集成学习思想
		机器学习中的一种思想,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器(基学习器)(弱弱变强/强强联合)
		
	算法
		Bagging
			
			
			随机森林算法
				基于 Bagging 思想实现的一种集成学习算法,采用决策树模型作为每一个弱学习器。
				
				训练过程
					(1)有放回的产生训练样本
(2)随机挑选 n 个特征(n 小于总特征数量)
				预测过程
					平权投票,多数表决输出预测结果
				实现流程
					
				API
					
						
				案例:泰坦尼克号幸存者
					
						
		Boosting
			
			
				
			Adaboost算法
				Adaptive Boosting(自适应提升)基于 Boosting思想实现的一种集成学习算法
核心思想是通过逐步提高那些被前一步分类错误的样本的权重来训练一个强分类器。
				算法流程
					
				案例:AdaBoost实战葡萄酒数据
					0 导入依赖包
						
					1 读数据到内存
						
					2 特征处理
						2-1 Adaboost一般做二分类 去掉一类(1,2,3)——>(2,3)
							
						2-2 获取特征和标签
							
						2-3 类别转化 (2,3)=>(0,1)
							
						2-4 划分数据
							
					3 实例化模型
						单决策树 
							
						Adaboost-由500颗树组成
							
					4 单决策树训练和评估
						
					5 AdaBoost训练和评估
						
			GBDT
				不再拟合残差,而是利用梯度下降的近似方法,利用损失函数的负梯度作为提升树算法中的残差近似值。
				构建流程
					
						1.初始化弱学习器
							预测值=目标值的平均值
						2.构建第一个弱学习器
							负梯度=目标值-预测值
							1.排序——>确定划分点
							2.划分点左右分别计算负梯度平均值
							3.计算各划分点的平方损失:损失=(负梯度-负梯度平均值)**2
							4. 最优划分点=平方损失最小值对应的划分点
							5.最优划分点左右的样本负梯度(预测值)= 左右样本负梯度的平均值
						3.构建第二个弱学习器
							目标值:上一个学习器的负梯度
							预测值:上一个学习器最优划分点左右负梯度平均值
							负梯度=目标值-预测值
							重复上一个学习构建过程的2-5步,得到预测值 = 最优划分点左右样本负梯度的平均值
						4.构建第三个弱学习器
							目标值
							预测值
							负梯度=目标值-预测值
							重复上一个学习构建过程的2-5步,得到预测值 = 最优划分点左右样本负梯度的平均值
						5.构建最终弱分类器
							
				案例:泰坦尼克号生存预测
					
						
			XGBoost
				(eXtreme Gradient Boosting),极端梯度提升树,是对GBDT的改进,并且在损失函数中加入了正则化项。
					集成学习方法的王牌,在数据挖掘比赛中,大部分获胜者用了XGBoost。
				构建思想
					
					
						
					从样本角度转为按照叶子节点输出角度,优化损失函数
						
							原理:泰勒展开
							
						
					目标函数
						
							
						又叫打分函数 (scoring function),从损失函数、树的复杂度两个角度来衡量一棵树的优劣。当我们构建树时,可以用来选择树的划分点。
						
							
				案例:红酒品质分类
					需求分析
						
					
					
					
					
		Bagging和Boosting对比
			

评估方法

accuracy_score
classification_report