机器学习基础知识学习笔记2

1.最近邻算法(KNN)

KNN算法介绍

kNN(k-Nearest Neighbor Classification),即k-近邻分类算法。
近朱者赤,近墨者黑。
一个样本在特征空间中,总会有k个最相似(即特征空间中最邻近)的样本。其中,大多数样本属于某一个类别,则该样本也属于这个类别。
是理论上比较成熟的方法,也是最简单的机器学习算法之一。
行业应用:
1.客户流失预测
2.欺诈侦测等(更适合于稀有事件的分类问题)

计算步骤:
1.算距离:给定测试对象,计算它与训练集中的每个对象的距离
2.找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
3.做分类:根据这k个近邻归属的主要类别,来对测试对象分类

  1. 算距离-即测试样本到训练样本的距离
    距离越近应该意味着这两个点属于一个分类的可能性越大。
    计算的距离衡量包括欧式距离、夹角余弦等。
    欧式距离:
    在这里插入图片描述
    典型的距离定义:
    在这里插入图片描述

  2. 找邻居
    由哪几个(K)已知样本决定测试样本类别?
    在这里插入图片描述

  3. 做分类
    1.投票决定:少数服从多数;
    2.加权投票法:根据距离的远近,距离越近则权重越大(权重为距离平方的倒数)。
    在这里插入图片描述
    算法流程
    1.计算已知类别数据集中的点与当前点之间的距离;
    2.按照距离递增次序排序;
    3.选取与当前点距离最小的k个点;
    4.确定前k个点所在类别对应的出现频率;
    5.返回前k个点出现频率最高的类别作为当前点的预测分类。

优点
简单,易于理解,易于实现,无需估计参数,无需训练;
适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型);
特别适合于多分类问题(multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,kNN比SVM的表现要好。
缺点
对测试样本分类时的计算量大,内存开销大,评分慢;
可解释性较差,无法给出决策树那样的规则。

KNN算法解决莺尾花分类问题

Python实现:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()  # 鸢尾花数据
data_tr, data_te, label_tr, label_te = train_test_split(iris.data, iris.target, test_size=0.2)   # 拆分专家样本集

model = KNeighborsClassifier(n_neighbors=5)   # 构建模型,5个邻居
model.fit(data_tr, label_tr)   # 模型训练
pre = model.predict(data_te)   # 模型预测
acc = model.score(data_te, label_te)   # 模型在测试集上的精度
acc

2.朴素贝叶斯分类(Naive Bayesian)

贝叶斯定理

“朴素”二字从何而来?

得到朴素贝叶斯表达式:
在这里插入图片描述
对于样本两个类别而言P(X)相等
故目标函数为:
在这里插入图片描述
y 的取值:是好瓜;不是好瓜

小例子

计算在这里插入图片描述
在这里插入图片描述
h (好瓜=是)= P (好瓜=是) x P青绿|是 x P蜷缩|是 x P浊响|是 x P清晰|是 x P凹陷|是
x P硬滑|是 x P密度:0.697|是 x P含糖:0.460|是 =0.038
h (好瓜=否)=P (好瓜=否) x P青绿|否 x P蜷缩|否 x P浊响|否 x P清晰|否 x P凹陷|否
x P硬滑|否 x P密度:0.697|否 x P含糖:0.460|否 =6.80 x 10-5
分类结果:好瓜

拉普拉斯平滑处理

缺陷:受样本个数限制,若某个属性值在训练集中没有与某个同类同时出现过,如P清脆|是=P (敲声=清脆|好瓜=是)=0/8=0,则连乘公式 h (好瓜=是)则必为零,其他属性取任意值都不能改变这一结论。

在这里插入图片描述
N表示训练集样本的类别数,Ni表示训练集样本在第 i 个属性上的取值个数

修正方法:拉普拉斯平滑处理
**加粗样式**
在这里插入图片描述

算法处理流程

在这里插入图片描述

Python实现-解决莺尾花分类问题

naive Bayes is a decent classifier, but a bad estimator
高斯朴素贝叶斯
构造方法:sklearn.naive_bayes.GaussianNB
GaussianNB 类构造方法无参数,属性值有:
class_prior_ #每一个类的概率
theta_ #每个类中各个特征的平均
sigma_ #每个类中各个特征的方差
注:GaussianNB 类无score 方法

import numpy as np
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])

clf = GaussianNB()
clf.fit(X, Y)
clf.predict([[-0.8, -1]])

iris = load_iris()
data_tr, data_te, label_tr, label_te = train_test_split(iris.data, iris.target, test_size=0.2)
clf.fit(data_tr, label_tr)
pre = clf.predict(data_te)
acc = sum(pre == label_te)/len(pre)   # 模型在测试集样本上的预测精度

3.聚类分析(Cluster Analysis)

聚类基本概念

分类与聚类

分类:学习/训练过程有监督,训练样本有明确标签
聚类:学习/训练过程无监督,样本无明确标签
聚类与分类的区别在于聚类不依赖于预先定义的类,没有预定义的类和样本——聚类是一种无监督的数据挖掘任务

聚类的概念

聚类是把各不相同的个体分割为有更多相似性子集合的工作。
聚类生成的子集合称为簇

在这里插入图片描述

聚类的要求

生成的簇内部的任意两个对象之间具有较高的相似度
属于不同簇的两个对象间具有较高的相异度
聚类通常作为其他数据挖掘或建模的前奏。

应用领域

1.客户价值分析
2.文本分类
3.基因识别
4.空间数据处理
5.卫星图片分析
数据分析、统计学、机器学习、空间数据库技术、生物学和市场学也推动了聚类分析研究的进展

常用聚类算法

1.K-均值聚类(K-Means)
2.K-中心点聚类(K-Medoids)
3.密度聚类(Densit-based Spatial Clustering of Application with Noise, DBSCAN)
4.层次聚类(系谱聚类 Hierarchical Clustering, HC)
5.期望最大化聚类(Expectation Maximization, EM)
需要说明的是,这些算法本身无所谓优劣,而最终运用于数据的效果却存在好坏差异,这在很大程度上取决于数据使用者对于算法的选择是否得当。

相似性度量

相似度如何衡量:距离
变量大致可以分为两类:
1.定量变量,也就是通常所说的连续变量。
2.定性变量,这些量并非真有数量上的变化,而只有性质上的差异。这些量可以分为两种,一种是有序变量,另一种是名义变量。

连续型变量距离:
在这里插入图片描述
相似系数
两个仅包含二元属性的对象之间的相似性度量也称相似系数
两个对象的比较有四种情况:f00 = x取0并且y取0的属性个数;f01 = x取0并且y取1的属性个数;f10 = x取1并且y取0的属性个数;f11 = x取1并且y取1的属性个数

简单匹配系数:SMC = 值匹配的属性个数 / 属性个数
= (f11 +f00) / (f01 + f10 + f11 + f00)
Jaccard(杰卡德) 系数 :J = 匹配的个数 / 不涉及0-0匹配的属性个数
= (f11) / (f01 + f10 +f11)

例如:
两个二元向量: x=(1,0,0,0,0,0,0,0,0,0)
y=(0,0,0,0,0,0,1,0,0,1)
f00 =7 (x取0并且y取0的属性个数)
f01 =2 (x取0并且y取1的属性个数)
f10 =1 (x取1并且y取0的属性个数)
f11 =0 (x取1并且y取1的属性个数)
简单匹配系数:SMC= (f11 +f00) / (f01 + f10 + f11 + f00)
=(0+7)/(2+1+0+7)=0.7
Jaccard系数:J = (f11) / (f01 + f10 +f11) =0/2+1+0 =0

余弦相似系数(如计算两文档间相似系数):
cos( x1, x2 ) = (x1  x2) / ||x1|| ||x2|| ,
其中  表示向量的点积(内积),||x||表示向量的范数。

例向量:
x1 = (3,2,0,5,0,0,0,2,0,0)
x2 = (1,0,0,0,0,0,0,1,0,2)
则余弦相似系数为:cos( x1, x2 ) = 5/(6.481*2.245)=0.3436

K-Means聚类分析

算法步骤

1.随机选取K个样本作为类中心;
2.计算各样本与各类中心的距离;
3.将各样本归于最近的类中心点;
4.求各类的样本的均值,作为新的类中心;
5.判定:若类中心不再发生变动或达到迭代次数,算法结束,否则回到第2步。
在这里插入图片描述

Python实现莺尾花聚类分析

from sklearn.datasets import load_iris
import numpy as np

iris = load_iris()
data = iris.data
n = len(data)
k = 2
dist = np.zeros([n, k+1])#构建初始距离矩阵
# 1、选中心
center = data[:k, :]#选择前K个数据作为中心
center_new = np.zeros([k, data.shape[1]])
while True:
    # 2、求欧式距离
    for i in range(n):
        for j in range(k):
            dist[i, j] = np.sqrt(sum((data[i, :] - center[j, :])**2))
        dist[i, k] = np.argmin(dist[i, :k])   # 3、求每个数据最小值距离的位置—即归类

    # 4、求新类中心
    for i in range(k):
        index = dist[:, k] == i#属于同一类“K”的索引
        center_new[i, :] = data[index, :].mean(axis=0)#按照列求均值

    # 5、判定类中心是否发生变化-即判定结束
    if np.all(center == center_new):
        break
    center = center_new#更新类中心

算法特点

优点:
1.算法简单,易于理解
2.对球形簇样本聚类效果好
3.二分k均值等变种算法运行良好,不受初始化问题的影响。

缺点:
1.不能处理非球形簇、不同尺寸和不同密度的簇
2.对离群点、噪声敏感.

聚类结果性能度量

性能度量:簇内相似度与簇间相似度
外部指标:将聚类结果与实际结果进行比较
内部指标:不依赖于任何参考模型,直接考察聚类结果

外部指标

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内部指标

在这里插入图片描述
紧密性(CP)越小越好—同类
间隔性(SP)越大越好—不同类

调用sklearn实现聚类分析

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans

iris = load_iris()

model = KMeans(n_clusters=3).fit(iris.data)

model.labels_

4.支持向量机(Support Vector Machine)

间隔与支持向量

### 步
在这里插入图片描述
在这里插入图片描述

代码实现:

from sklearn.datasets import load_iris
from sklearn.svm import LinearSVC
from sklearn.model_selection import train_test_split

iris = load_iris()

data_tr, data_te, label_tr, label_te = train_test_split(iris.data, iris.target, test_size=0.2)
model = LinearSVC().fit(data_tr, label_tr)
pre = model.predict(data_te)
acc_te = sum(pre == label_te)/len(pre)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值