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) 算法
分类器训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量 D ,AdaBoost为每个分类器都分配了一个权重值 \(\alpha\)
\(\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()
数据填充(填充数据集中的缺失值)
模型性能度量指标
- 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)越大说明分类器越好)