几种机器学习算法的原理、推导和代码实现

一、基算法

1、决策树(Decision Tree)

(1)原理:决策树根据样本数据集的数据特征对数据集进行划分,直到针对所有特征都划分过,或者划分的数据子集的所有数据的类别标签相同。
(2)推导:
(3)代码实现:

from sklearn.datasets import load_iris
from sklearn.datasets import load_iris
from sklearn import tree # 导入树模型
import graphviz # 导入可视化模块
import pydotplus # 导入图形界面模块

clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)

dot_data = tree.export_graphviz(clf) # 将决策树以pdf格式可视化
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("C:/Users/马青坡/Desktop/data/decisiontree.pdf")

2、逻辑回归(Logistic Regression)

(1)原理:逻辑回归是一种线性分类器,通过logistic函数,将特征映射成一个概率值,来判断输入数据的类别。
(2)推导:
(3)代码实现:

from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(random_state = 0)
X, y = load_iris(return_X_y = True)
clf = clf.fit(X, y)
clf.predict(X[:2, :])

clf.predict_proba(X[:2, :])
clf.score(X, y)

3、支持向量机(SVM, Support Vector Machine)

(1)原理:寻找一个能够正确划分训练数据集并且几何间隔最大的分离超平面。
(2)推导:
(3)代码实现:

from sklearn import datasets
iris = datasets.load_iris()

from sklearn.model_selection import train_test_split
iris_feature = iris.data # 特征
iris_label = iris.target # 分类标签
X_train, X_test, Y_train, Y_test = train_test_split(iris_feature, iris_label, test_size = 0.3, random_state = 42) # 划分

from sklearn import svm
svm = svm.SVC(C = 1.0, kernel = 'rbf', decision_function_shape = 'ovr', gamma = 0.01)
svm.fit(X_train, Y_train)

print("训练集:", svm.score(X_train, Y_train))
print("测试集:", svm.score(X_test, Y_test))

4、朴素贝叶斯(Naive Bayesian Classifier)
(1)原理:
(2)推导:
(3)代码实现:

二、集成算法
5、随机森林(Random Forest)
(1)原理:多棵决策树
(2)推导:
(3)代码实现:

6、AdaBoost(Adaptive Boosting)
(1)原理:AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。具体说来,整个Adaboost 迭代算法就3步:①初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。(2)训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。(3)将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
(2)推导:
(3)代码实现:

7、GBDT(Gradient Boosting Decision Tree)
(1)原理:与AdaBoost不同,GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。
(1)推导:
(2)代码实现:

8、XGBoost(eXtreme Gradient Boosting)
(1)原理:并行,正则化防止过拟合。
(2)推导:
(3)代码实现:

9、LightGBM(Light Gradient Boosting Machine)
(1)原理:
(2)推导:
(3)代码实现:

你可能感兴趣的:(算法入门)