希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持!
⭐ 深度学习之前:机器学习简史
什么要了解其他机器学习算法? 💜
如果你第一次接触的机器学习就是深度学习,那你可能会发现手中握着一把深度学习“锤子”,而所有机器学习问题看起来都像是“钉子”
为了避免陷入这个误区,唯一的方法就是熟悉其他机器学习方法并在适当的时候进行实践
本文将介绍:
- 💡 朴素贝叶斯算法
- 💡 logistic 回归
- 💡 支持向量机 SVM
- 💡 决策树
- 💡 随机森林
- …
---- 概率建模(probabilistic modeling)💜 统计学原理在数据分析中的应用
➕ 朴素贝叶斯算法:朴素贝叶斯是一类基于应用贝叶斯定理的机器学习分类器,它假设输入数据的特征都是独立的
贝叶斯定理: P ( C ∣ X ) = P ( X ∣ C ) P ( C ) P ( X ) P(C|X) = \frac{P(X|C)P(C)}{P(X)} P(C∣X)=P(X)P(X∣C)P(C)
- P ( C ∣ X ) P(C|X) P(C∣X):在已知特征 X X X 的情况下,属于类别 C C C 的概率
- P ( X ∣ C ) P(X|C) P(X∣C):在已知类别 C C C 的情况下,特征 X X X 出现的概率
- P ( C ) P(C) P(C):类别 C C C 的先验概率
- P ( X ) P(X) P(X):特征 X X X 出现的概率
朴素贝叶斯分类规则: P ( C ∣ X 1 , X 2 , … , X n ) ∝ P ( C ) ∏ i = 1 n P ( X i ∣ C ) P(C|X_1, X_2, \dots, X_n) \propto P(C) \prod_{i=1}^{n} P(X_i|C) P(C∣X1,X2,…,Xn)∝P(C)∏i=1nP(Xi∣C)
- P ( C ∣ X 1 , X 2 , … , X n ) P(C|X_1, X_2, \dots, X_n) P(C∣X1,X2,…,Xn):属于类别 C C C 的条件概率
- P ( C ) P(C) P(C):类别 C C C 的先验概率
- P ( X i ∣ C ) P(X_i|C) P(Xi∣C):特征 X i X_i Xi 在给定类别 C C C 下的条件概率
from sklearn.naive_bayes import GaussianNB
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)
➕ logistic 回归:快速入门指路 👉 Logistic Regression 理论
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
---- 核方法(kernel method)💜
➕ 支持向量机(SVM,support vector machine):通过两步来在属于两个不同类别的两组数据点之间找到良好决策边界
- 【利用核技巧映射】将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示
- 核函数(通常是人为选择的)是一个在计算上能够实现的操作,将原始空间中的任意两点映射为这两点在目标表示空间中的距离,完全避免了对新表示进行直接计算
- 【间隔最大化】尽量让超平面与每个类别最近的数据点之间的距离最大化
from sklearn.svm import SVC
model = SVC(kernel='linear', random_state=42)
model.fit(X_train_scaled, y_train)
---- 流程图决策 💜
➕ 决策树(decision tree):如下图所示
from sklearn.tree import DecisionTreeClassifier
dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train_scaled, y_train)
➕ 随机森林(random forest):引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起
from sklearn.ensemble import RandomForestClassifier
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train_scaled, y_train)
完整代码示例 💜 以 鸢尾花数据集 (Iris Dataset) 为例
鸢尾花数据集包含 150 个样本和 4 个特征:sepal_length(萼片长度)、sepal_width(萼片宽度)、petal_length(花瓣长度)和 petal_width(花瓣宽度),目标变量是 species(鸢尾花种类)
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# ---------------------------------------------------------------------------- 准备数据
# 加载鸢尾花数据集
iris = sns.load_dataset('iris')
# print(iris.isnull().sum()) # 检查数据集是否有缺失值
# print(iris.info()) # 显示数据集的基本信息
# print(iris.head()) # 查看数据集的前几行
# 只选择 Setosa 和 Versicolor 两个种类来做二分类任务
iris_binary = iris[iris['species'].isin(['setosa', 'versicolor'])]
# 特征和目标变量
X = iris_binary[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
y = iris_binary['species']
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# ---------------------------------------------------------------------------- 朴素贝叶斯算法
from sklearn.naive_bayes import GaussianNB
# 创建贝叶斯分类器模型
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)
y_pred_nb = nb_model.predict(X_test) # 预测测试集
accuracy_nb = accuracy_score(y_test, y_pred_nb) # 计算准确率
print(f"贝叶斯分类器模型的准确率:{accuracy_nb:.2f}")
# ---------------------------------------------------------------------------- Logistic 回归
from sklearn.linear_model import LogisticRegression
# 创建 Logistic 回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test) # 预测测试集
accuracy = accuracy_score(y_test, y_pred) # 计算准确率
print(f"逻辑回归模型的准确率:{accuracy:.2f}")
# ---------------------------------------------------------------------------- SVM
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
# 数据标准化:支持向量机对特征尺度非常敏感
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建SVM分类器
model = SVC(kernel='linear', random_state=42)
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled) # 预测测试集
accuracy = accuracy_score(y_test, y_pred) # 计算准确率
print(f"SVM模型的准确率:{accuracy:.2f}")
# ---------------------------------------------------------------------------- 决策树
from sklearn.tree import DecisionTreeClassifier
# 创建决策树分类器
dt_model = DecisionTreeClassifier(random_state=42)
dt_model.fit(X_train_scaled, y_train)
y_pred_dt = dt_model.predict(X_test_scaled) # 预测测试集
accuracy_dt = accuracy_score(y_test, y_pred_dt) # 计算准确率
print(f"决策树模型的准确率:{accuracy_dt:.2f}")
# ---------------------------------------------------------------------------- 随机森林
from sklearn.ensemble import RandomForestClassifier
# 创建随机森林分类器
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train_scaled, y_train)
y_pred_rf = rf_model.predict(X_test_scaled) # 预测测试集
accuracy_rf = accuracy_score(y_test, y_pred_rf) # 计算准确率
print(f"随机森林模型的准确率:{accuracy_rf:.2f}")
参考书籍:Python 深度学习