zhongqiao yuan 1 éve
szülő
commit
8b8251e193
1 módosított fájl, 240 hozzáadás és 1 törlés
  1. 240 1
      ml-alg.md

+ 240 - 1
ml-alg.md

@@ -1,4 +1,3 @@
-
 经典机器学习算法是人工智能领域的重要组成部分,它们能够从数据中自动学习并做出预测或决策。以下是一些经典的机器学习算法介绍:
 
 ### 1. 线性回归(Linear Regression)
@@ -50,3 +49,243 @@
 * **特点**:能够保留数据的主要特征,降低数据的维度,但可能丢失部分信息。
 
 这些经典机器学习算法各有特点,适用于不同的任务和数据类型。在实际应用中,需要根据具体问题选择合适的算法,并进行适当的参数调整和模型优化。
+
+
+
+
+
+以下是一个经典机器学习算法的入门手册:
+
+# 经典机器学习算法入门手册
+
+## 一、引言
+机器学习是人工智能的一个重要分支,它使计算机能够从数据中自动学习模式和规律,而无需显式编程。经典机器学习算法分为监督学习、无监督学习和半监督学习三大类,下面将详细介绍各类中的一些经典算法,并通过 Python 代码示例展示其用法。
+
+## 二、监督学习
+
+### (一)线性回归(Linear Regression)
+- **概念说明**:
+    - 线性回归是一种用于预测数值型数据的监督学习算法,它假设输入特征和目标变量之间存在线性关系。其核心是找到一条最佳拟合直线(在二维空间)或超平面(在高维空间),使得预测值与真实值之间的误差最小化。
+    - 公式表示为:\(y = w_0 + w_1x_1 + w_2x_2 +... + w_nx_n\),其中 \(y\) 是预测值,\(x_i\) 是输入特征,\(w_i\) 是模型的权重,\(w_0\) 是截距。
+- **详细讲解**:
+    - 线性回归通过最小化损失函数(通常是均方误差,MSE)来训练模型,使用梯度下降等优化算法调整权重 \(w_i\) ,使得损失最小。
+    - 算法步骤:
+        1. 初始化权重和截距。
+        2. 计算预测值。
+        3. 计算损失(如 MSE)。
+        4. 计算梯度,更新权重和截距。
+        5. 重复步骤 2-4 直到收敛。
+- **demo 实例**:
+```python
+import numpy as np
+from sklearn.linear_model import LinearRegression
+import matplotlib.pyplot as plt
+
+# 生成一些简单的数据
+np.random.seed(0)
+X = np.random.rand(100, 1)  # 输入特征
+y = 2 + 3 * X + np.random.randn(100, 1)  # 目标变量,y = 2 + 3x + 噪声
+
+# 使用 sklearn 的线性回归模型
+model = LinearRegression()
+model.fit(X, y)
+
+# 输出模型的权重和截距
+print(f'权重: {model.coef_}')
+print(f'截距: {model.intercept_}')
+
+# 预测
+X_new = np.array([[0], [1]])
+y_pred = model.predict(X_new)
+
+# 可视化结果
+plt.scatter(X, y)
+plt.plot(X_new, y_pred, 'r-')
+plt.xlabel('x')
+plt.ylabel('y')
+plt.show()
+```
+
+### (二)逻辑回归(Logistic Regression)
+- **概念说明**:
+    - 逻辑回归是一种用于二分类问题的监督学习算法,它将线性回归的结果通过逻辑函数(通常是 Sigmoid 函数)转换为概率值,从而预测样本属于某个类别的概率。
+    - Sigmoid 函数:\(P(y = 1) = 1 / (1 + exp(-z))\),其中 \(z = w_0 + w_1x_1 + w_2x_2 +... + w_nx_n\)。
+- **详细讲解**:
+    - 目标是最大化似然函数,通常使用梯度下降或其变种(如随机梯度下降)进行优化。
+    - 算法步骤:
+        1. 初始化权重和截距。
+        2. 计算线性组合 \(z\)。
+        3. 计算概率 \(P(y = 1)\)。
+        4. 计算损失(如对数似然损失)。
+        5. 计算梯度,更新权重和截距。
+        6. 重复步骤 2-5 直到收敛。
+- **demo 实例**:
+```python
+from sklearn.linear_model import LogisticRegression
+from sklearn.datasets import make_classification
+from sklearn.model_selection import train_test_split
+from sklearn.metrics import accuracy_score
+
+# 生成分类数据
+X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, random_state=42)
+X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
+
+# 使用 sklearn 的逻辑回归模型
+model = LogisticRegression()
+model.fit(X_train, y_train)
+
+# 预测
+y_pred = model.predict(X_test)
+print(f'准确率: {accuracy_score(y_test, y_pred)}')
+```
+
+### (三)决策树(Decision Tree)
+- **概念说明**:
+    - 决策树是一种基于树结构的分类和回归算法,通过对特征空间进行划分,将数据逐步分类或回归。它从根节点开始,根据特征的不同取值将数据分到不同的子节点,直到叶子节点得到预测结果。
+    - 关键概念包括信息增益、基尼指数等,用于选择最佳划分特征。
+- **详细讲解**:
+    - 算法步骤:
+        1. 从根节点开始,选择最佳划分特征。
+        2. 根据特征的不同取值创建子节点。
+        3. 对每个子节点重复步骤 1 和 2,直到满足停止条件(如达到最大深度、节点纯度足够高)。
+        4. 对于分类问题,叶子节点的类别通常是该节点中样本最多的类别;对于回归问题,叶子节点的预测值是该节点样本的平均值。
+- **demo 实例**:
+```python
+from sklearn.tree import DecisionTreeClassifier
+from sklearn.datasets import load_iris
+from sklearn.model_selection import train_test_split
+from sklearn.metrics import accuracy_score
+
+# 加载鸢尾花数据集
+iris = load_iris()
+X = iris.data
+y = iris.target
+X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
+
+# 使用 sklearn 的决策树分类器
+model = DecisionTreeClassifier(max_depth=3)
+model.fit(X_train, y_train)
+
+# 预测
+y_pred = model.predict(X_test)
+print(f'准确率: {accuracy_score(y_test, y_pred)}')
+```
+
+
+## 三、无监督学习
+
+### (一)K 均值聚类(K-Means Clustering)
+- **概念说明**:
+    - K 均值聚类是一种将数据分成 \(K\) 个簇的无监督学习算法,目标是最小化簇内误差平方和(SSE)。
+    - 算法将数据点分配到最近的簇中心,并不断更新簇中心,直到簇中心不再变化或达到最大迭代次数。
+- **详细讲解**:
+    - 算法步骤:
+        1. 随机初始化 \(K\) 个簇中心。
+        2. 将每个数据点分配到最近的簇中心。
+        3. 更新簇中心为簇内数据点的均值。
+        4. 重复步骤 2 和 3 直到收敛。
+- **demo 实例**:
+```python
+from sklearn.cluster import KMeans
+import numpy as np
+import matplotlib.pyplot as plt
+
+# 生成数据
+np.random.seed(0)
+X = np.random.rand(100, 2)
+
+# 使用 sklearn 的 K 均值聚类模型
+kmeans = KMeans(n_clusters=3, random_state=42)
+kmeans.fit(X)
+
+# 簇标签和簇中心
+labels = kmeans.labels_
+centroids = kmeans.cluster_centers_
+
+# 可视化结果
+plt.scatter(X[:, 0], X[:, 1], c=labels)
+plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
+plt.xlabel('Feature 1')
+plt.ylabel('Feature 2')
+plt.show()
+```
+
+### (二)主成分分析(Principal Component Analysis,PCA)
+- **概念说明**:
+    - PCA 是一种降维技术,通过线性变换将高维数据投影到低维空间,同时保留数据的最大方差,将数据的特征维度降低,便于可视化和分析。
+    - 核心是找到数据的主成分,这些主成分是原始数据的线性组合,并且相互正交。
+- **详细讲解**:
+    - 算法步骤:
+        1. 计算数据的协方差矩阵。
+        2. 计算协方差矩阵的特征值和特征向量。
+        3. 选择最大的 \(k\) 个特征值对应的特征向量作为主成分。
+        4. 将数据投影到主成分上。
+- **demo 实例**:
+```python
+from sklearn.decomposition import PCA
+from sklearn.datasets import load_iris
+import matplotlib.pyplot as plt
+
+# 加载鸢尾花数据集
+iris = load_iris()
+X = iris.data
+y = iris.target
+
+# 使用 PCA 将数据降维到 2 维
+pca = PCA(n_components=2)
+X_pca = pca.fit_transform(X)
+
+# 可视化结果
+plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
+plt.xlabel('Principal Component 1')
+plt.ylabel('Principal Component 2')
+plt.show()
+```
+
+
+## 四、半监督学习
+
+### (一)标签传播算法(Label Propagation)
+- **概念说明**:
+    - 标签传播算法利用少量的有标签数据和大量的无标签数据进行学习,通过在图上传播标签信息,将标签扩散到无标签数据。
+    - 假设数据点之间的连接关系可以表示为图,通过邻居节点的标签信息来预测无标签节点的标签。
+- **详细讲解**:
+    - 算法步骤:
+        1. 构建数据点之间的图(如使用 K 近邻构建图)。
+        2. 初始化有标签节点的标签。
+        3. 通过迭代,将邻居节点的标签传播到无标签节点。
+        4. 直到标签收敛或达到最大迭代次数。
+- **demo 实例**:
+```python
+from sklearn.semi_supervised import LabelSpreading
+from sklearn.datasets import make_classification
+import numpy as np
+
+# 生成一些分类数据,其中部分数据有标签,部分无标签
+X, y = make_classification(n_samples=1000, n_features=2, n_classes=2, random_state=42)
+# 假设前 10 个样本有标签,其余无标签
+labels = np.copy(y)
+labels[10:] = -1  
+
+# 使用 sklearn 的标签传播算法
+model = LabelSpreading()
+model.fit(X, labels)
+
+# 预测
+y_pred = model.predict(X)
+print(y_pred[:10])
+```
+
+
+## 五、总结
+经典机器学习算法为我们提供了强大的工具,可以解决各种预测和分类问题。不同的算法适用于不同的场景,通过调整参数和使用合适的评估指标,可以让这些算法在不同数据集上发挥更好的性能。以上的代码示例展示了如何使用 Python 中的 `sklearn` 库快速实现这些算法,为进一步学习和实践提供了基础。
+
+希望这个入门手册能帮助你开启机器学习的学习之旅,在实际应用中,可以根据具体问题的特点和数据的特性选择合适的算法,并不断探索和优化,以达到更好的效果。
+
+
+通过这个入门手册,你可以对经典机器学习算法的概念、详细原理和实际应用有一个基本的了解,并可以通过 Python 代码示例快速上手这些算法。
+
+
+
+
+