机器学习算法(一)
介绍如何使用算法:1、如何评价算法好坏。2、如何解决过拟合和欠拟合。3、如何调节算法的参数。4、如何验证算法的正确性。
机器学习的任务:监督学习(分类和回归)
机器学习方法分类:监督学习、非监督学习、半监督学习、增强学习。
非监督学习的意义:对数据进行降维处理(特征提取、特征压缩:PCA)
机器学习其他分类:在线学习和批量学习(离线学习),参数学习和非参数学习
机器学习分为:
监督学习(Supervised Learning)
无监督学习(Unsupervised Learning)
强化学习(Reinforcement Learning,增强学习)
半监督学习(Semi-supervised Learning)
深度学习(Deep Learning)
sklearn库可以完成分类、回归、聚类、降维、模型选择和数据预处理等任务。
有无监督学习主要看其是否有标签,有标签的为监督学习,无标签的为无监督学习。无监督学习最常见的是聚类和降维。
一、
1 聚类
聚类是根据数据的“相似性”将数据分为多类的过程。
评估两个不同样本的相似性,即计算两个样本之间的“距离”。不同计算样本间距离的方法与聚类结果的好坏有关系。
“距离”计算方法如下四种:
1)欧氏距离
二维空间欧氏距离计算:
欧式距离公式:
2)曼哈顿距离
二维空间曼哈顿距离计算
曼哈顿距离计算:
3)马氏距离
二维空间马氏距离
马氏距离:
4)夹角余弦
二维空间夹角余弦:
夹角余弦:
2 降维
降维是在保证数据所具有代表性特征或者分布的情况下,将高维数据转化为低维数据的过程。其作用:数据可视化;精简数据。
二、
聚类算法
1、K-means聚类算法
以k为参数,将n个对象分解成k个簇,使簇内相似度高,簇间相似度低。
步骤:随机选择k个点作为初始的聚类中心,剩下的点根据与聚类中心的距离,归类为最近的簇,对每个簇计算所有点的均值作为新的聚类中心,重复前面剩下点的操作,直到聚类中心不再发生改变。
K-means聚类算法的实现过程
1)建立工程,导入sklearn相关包
import numpy as np
from sklearn.cluster import KMeans
2)加载数据,创建K-means算法实例,并进行训练,获得标签。
1、利用loadData方法读取数据
2、创建实例
3、调用Kmeans()fit_predict()方法进行计算。
调用K-Means方法所需的参数:
n_clusters:用于指定聚类中心的个数
init:初始聚类中心的初始化方法
max_iter:最大的迭代次数
data:加载的数据
label:聚类后各数据所属的标签
fit_predict():计算簇中心以及为簇分配序号
一般调用K-Means方法时,只用给出n_clusters即可,init默认是k-means++,max_iter默认是300。
r+:读写打开一个文本文件
.readlines():一次读取整个文件(类似于.read())
3)输出标签,查看结果
加入聚类结果为5类,则:
km=KMeans(n_clusters=5)
扩展和改进
计算两条数据相似性时,Sklearn的K-Means默认用的是欧氏距离。虽然还有余弦相似度,马氏距离等多种方法,但没有设定计算距离方法的参数。
如果要自定义计算距离,可以更改K-Means代码的eucliden_distances的源码,使用scipy.spatial.distance.cdist方法。例如代码可以改为:
scipy.spatial.distance.cdist(A,B,metric=‘cosine’)
2、DBSCAN方法
DBSCAN算法是一种基于密度的聚类算法,聚类的时候不需要预先指定簇的个数,最终的簇的个数也不定。
DBSCAN算法将数据点分为三类:
核心点:在半径Eps内含有超过MinPts数目的点。
边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的领域内。
噪音点:既不是核心点也不是边界点的点。
DBSCAN算法流程:
1)将所有点标记为核心点、边界点或者噪声点
2)删除噪声点
3)为距离在Eps之内的所有核心点之间赋予一条边
4)每组连通的核心点形成一个簇
5)将每个边界点指派到一个与之关联的核心点的簇中(哪一个核心点的半径范围之内)
DBSCAN算法的实现过程:
1、建立工程,导入sklearn相关包
import numpy as np
from sklearn.cluster import DBSCAN
DBSCAN主要参数:
eps:两个样本被看作邻居节点的最大距离
min_samples:簇的样本数
metric:距离计算公式
代码示例:
sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metrci=‘euclidean’)
2、读入数据并进行处理
3、聚类,创建DBSCAN算法实例,并进行训练,获得标签:
1)调用DBSCAN方法进行训练,labels为每个数据的簇标签。
2)打印数据被记上的标签,计算标签为-1,即噪声数据的比例。
3)计算簇的个数并打印,评价聚类效果。
4)打印各簇标号以及各簇内数据
4、输出标签,查看结果。
5、画直方图,分析实验结果。
import matplotlib.pyplot as pet plt.hist(X,24)
6、数据分布vs聚类(可以采用对数变换)
降维算法
1、主成分分析(PCA)算法(Principal Component Analysis)
通常用于高维数据的探索与可视化,还可以用作数据压缩和预处理等。该算法把具有相关性的高维变量合成为线性无关的低维变量,称为主成分。主成分能够尽可能保留原始数据的信息。
PCA涉及到的相关术语:方差、协方差、协方差矩阵、特征向量和特征值。
1)方差:各个样本和样本均值的差的平方和的均值,用来度量一组数据的分散程度。
2)协方差:用于度量两个变量之间的线性相关程度,若两个变量的协方差为0,则可认为二者线性无关。协方差矩阵则是由变量的协方差值构成的矩阵(对称阵)。
3)特征向量:矩阵的特征向量是描述数据集结构的非零向量并且满足公式
其中A是方阵。
主成分分析原理:矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。
在sklearn库中,使用sklearn.decomposition.PCA加载PCA进行降维,主要的参数如下:
n_components:指定主成分的个数,即降维后数据的维度。
svd_solver:设置特征值分解的方法,默认为‘auto’,其他可选有‘full’,‘arpack’,‘randomized’。
以鸢尾花为实例实现过程:
1、建立工程,导入sklearn相关工具包。
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
2、加载数据并进行降维
data