Machine Learning

Machine Learning

建议学习资料:https://github.com/chengyingshe/ai_learning

main分支中有使用仓库的介绍,ml分支为机器学习部分

博客内容介绍

本博客主要本人在学习机器学习时做的一些笔记,包含了机器学习中常用的算法和部分原理讲解
代码部分均使用sklearn库函数进行讲解

监督式学习

KNN算法

K最近邻算法
计算一个新的特征点在训练数据集中距离其最近的K个点中种类最多的类别(label)作为该点的类别(label)。
严格意义上该算法并没有学习能力

# sklearn实现KNN算法
from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors)
knn.fit(features, labels)
knn.predict(<test_data>)  # <test_data>必须是一个数组(batch)

决策树算法

  • 信息熵:$${H(x) = - \sum_{i} P_{i}(x) \times log_{2}P_{i}(x)}$$

  • 缺点:

    容易发生过拟合(需要进行剪枝等操作)

    对数据的抖动变化明显

# 使用sklearn实现决策树算法
from sklearn.tree import DecisionTreeClassifier

classifier = DecisionTreeClassifier(max_depth)
classifier.fit(features, labels)  # features中的元素必须都是数值类型的(需要对字符串类型的数据进行编码)
classifier.predict(<test_data>)

朴素贝叶斯算法

  • 词集模型(set-of-words)

  • 词袋模型(bag-of-words)

    每个单词在词集中只能出现0或1次,在词袋模型中可以出现多次

文档编码

from sklearn.feature_extraction.text import CountVectorizer

# 创建一个文本向量编码器()
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)

Logistic回归

SVM分类器

使用线性方程来表示多维空间下的超平面:

\[w^{\mathrm{T}}x+b=0 \]

其中 w 为法向量,决定了超平面的方向 b 为位移项,决定

了超平面与原点之间的距离

样本主 间中任意点 到超平面 (w, b) 的距离可写为

\[r=\frac{|\boldsymbol{w^\mathrm{T}}x+b|}{||\boldsymbol{w}||} \]

元算法

将多个分类器组合起来的方法 (meta-algorithm),用于提升模型性能

  • AdaBoost (adaptive boosting) 算法

    image

    分类器训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量 D ,AdaBoost为每个分类器都分配了一个权重值 \(\alpha\)

    image

    image

    \(\alpha=\frac{1}{2}\ln\left(\frac{1-\varepsilon}{\varepsilon}\right)\)(单调递减函数,\(\varepsilon\) 越大,\(\alpha\) 越小,分配的权重越小)

相关知识补充

数据编码

# 数据编码
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
le = LabelEncoder()
# 将字符串类型的数据进行编码(先进行排序,然后选用index)
le.fit_transform(['aaa', 'bbb', 'eee', 'ddd']).tolist()
ohe = OneHotEncoder()
# 将字符串类型的数据进行one-hot vector编码
# 传入的字符串数组的shape必须是 n x 1 
ohe.fit_transform(np.array(['aaa', 'bbb', 'eee', 'ddd']).reshape(-1, 1)).toarray()

数据填充(填充数据集中的缺失值)

image

模型性能度量指标

image

  • TP(true positive)
  • FP(false positive)
  • TN(true negative)
  • FN(false negative)
  • 正确率

    \[Precision=\frac{TP}{TP+FP} \]

  • 召回率

    \[Recall=\frac{TP}{TP+FN} \]

  • ROC曲线

    横轴:\(真阳率=\frac{TP}{TP+FN}\)

    纵轴:\(假阳率=\frac{FP}{FP+TN}\)

    AUC:ROC曲线下的面积(面积(0~1)越大说明分类器越好)

预测数值型数据(回归)

线性回归

树回归

posted @ 2024-04-18 10:45  MaximeSHE  阅读(1)  评论(0编辑  收藏  举报