Py学习  »  机器学习算法

超强总结,必会的8大机器学习算法!

学姐带你玩AI • 11 月前 • 243 次点击  

来源:投稿  作者:恒心
编辑:学姐

机器学习是人工智能的一个重要分支,它让计算机通过数据学习并进行预测。对于初学者来说,了解常用的机器学习算法及其实现方式是非常重要的。本篇文章将总结几种常见的机器学习算法,并提供相应的Python代码示例和详细的解释,希望能帮助小白更好地理解这些算法。

unsetunset1. 线性回归unsetunset

线性回归是一种用于预测数值型结果的算法。其基本思想是通过拟合一条直线来描述自变量与因变量之间的关系。如果我们有一组数据点,我们希望通过这些数据点来找到最优的线性方程。

数学模型

线性回归的数学模型为:

img

其中:

  • yy 是预测值
  • ww 是权重(斜率)
  • xx 是输入特征
  • bb 是偏置项(截距)

Python 实现

下面是使用 scikit-learn 库实现线性回归的示例代码:

pythonCopy Codeimport numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 生成样本数据
np.random.seed(0)
x = 2.5 * np.random.rand(100)  # 自变量
y = 1 + 2 * x + np.random.randn(100)  # 因变量,加上一些随机噪声

# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x.reshape(-1, 1), y, test_size=0.2, random_state=42)

# 创建线性回归模型
model = LinearRegression()
model.fit(x_train, y_train)  # 训练模型

# 进行预测
y_pred = model.predict(x_test)

# 可视化
plt.scatter(x_test, y_test, color='blue', label='真实值')
plt.scatter(x_test, y_pred, color='red', label='预测值')
plt.xlabel('自变量 x')
plt.ylabel('因变量 y')
plt.title('线性回归')
plt.legend()
plt.show()

解释

  1. 生成样本数据:我们生成了一些随机数据点,其中 yy 与 xx 存在一定的线性关系。
  2. 划分数据集:使用 train_test_split 将数据随机划分为训练集和测试集,80%的数据用于训练,20%用于测试。
  3. 创建模型:使用 LinearRegression() 创建线性回归模型,并使用训练数据进行训练。
  4. 进行预测:用测试数据进行预测,并可视化真实值与预测值的关系。

unsetunset2. 逻辑回归unsetunset

逻辑回归主要用于二分类问题。尽管名字中有“回归”,但它实际上是用于分类的。逻辑回归通过使用 Sigmoid 函数将输出映射到 (0, 1) 的范围内,从而得到概率值。

数学模型

逻辑回归的模型为:

img

其中 z=wx+bz=w**x+b,pp 是事件发生的概率。

Python 实现

pythonCopy Codefrom sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X = iris.data[:100, :2]  # 选择前100个样本(两个类别)
y = iris.target[:100]     # 目标值

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建逻辑回归模型
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}')

解释

  1. 加载数据集:我们使用鸢尾花数据集,其中只有前100个样本用于二分类(Setosa 和 Versicolour)。
  2. 划分数据集:同样使用 train_test_split 划分数据集。
  3. 创建模型:使用 LogisticRegression() 创建逻辑回归模型,并训练。
  4. 进行预测:对测试集进行预测,并计算模型的准确率。

unset unset3. 决策树unsetunset

决策树是一种简单易懂的分类和回归方法。它通过逐步询问问题,将数据分成不同的类别。每个节点代表一个特征,每条边代表一个特征的取值,叶子节点代表最终的决策。

Python 实现

pythonCopy Codefrom sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report

# 加载数据集
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)

# 创建决策树模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)  # 训练模型

# 进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')
print(classification_report(y_test, y_pred))

解释

  1. 加载数据集:使用鸢尾花数据集,包括三个类别的样本。
  2. 划分数据集:划分为训练集和测试集。
  3. 创建模型:使用 DecisionTreeClassifier() 创建决策树模型,并训练。
  4. 进行预测:对测试集进行预测,输出准确率和分类报告,以评估模型性能。

unsetunset4. K近邻算法(KNN)unsetunset

K近邻算法是一种基于实例的学习方法,用于分类和回归。KNN的基本思想是,对于一个待分类的样本,通过查看其最近的K个邻居的类别,来决定该样本的类别。

Python 实现

pythonCopy Codefrom sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
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)

# 创建KNN模型,设定K=3
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)  # 训练模型

# 进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')

解释

  1. 加载数据集:同样使用鸢尾花数据集。
  2. 划分数据集:划分为训练集和测试集。
  3. 创建模型:选择K=3的KNN模型,并训练。
  4. 进行预测:对测试集进行预测,输出准确率。

unsetunset5. 支持向量机(SVM)unsetunset

支持向量机是一种强大的分类算法,它通过寻找最佳超平面来分割不同类别的数据。SVM在高维空间中表现良好,适用于线性和非线性分类问题。

Python 实现

pythonCopy Codefrom sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
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)

# 创建SVM模型
model = SVC(kernel='linear')  # 使用线性核
model.fit(X_train, y_train)  # 训练模型

# 进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')

解释

  1. 加载数据集:使用鸢尾花数据集。
  2. 划分数据集:划分为训练集和测试集。
  3. 创建模型:选择线性核的SVM模型,并训练。
  4. 进行预测:对测试集进行预测,输出准确率。

unsetunset6. 随机森林unsetunset

随机森林是一种集成学习算法,由多个决策树组成。它通过结合多个树的预测结果来提高分类的准确性,并降低过拟合的风险。

Python 实现

pythonCopy Codefrom sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
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)

# 创建随机森林模型
model = RandomForestClassifier(n_estimators=100)  # 100棵树
model.fit(X_train, y_train)  # 训练模型

# 进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')

解释

  1. 加载数据集:使用鸢尾花数据集。
  2. 划分数据集:划分为训练集和测试集。
  3. 创建模型:创建一个有100棵树的随机森林模型并训练。
  4. 进行预测:对测试集进行预测,输出准确率。

unsetunset 7. 梯度提升树(Gradient Boosting)unsetunset

梯度提升树是一种集成学习算法,通过逐步构建树来优化模型。每一棵树都是在前一棵树的基础上建立的,重点关注之前模型中错误的样本。

Python 实现

pythonCopy Codefrom sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
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)

# 创建梯度提升树模型
model = GradientBoostingClassifier(n_estimators=100)  # 100棵树
model.fit(X_train, y_train)  # 训练模型

# 进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')

解释

  1. 加载数据集:使用鸢尾花数据集。
  2. 划分数据集:划分为训练集和测试集。
  3. 创建模型:创建一个有100棵树的梯度提升树模型并训练。
  4. 进行预测:对测试集进行预测,输出准确率。

unset unset8. 聚类算法(K均值)unsetunset

K均值聚类是一种无监督学习算法,旨在将数据分成K个簇。它通过迭代的方法将每个点分配到最近的簇中,并更新簇的中心位置。

Python 实现

pythonCopy Codefrom sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 加载数据集
iris = load_iris()
X = iris.data

# 创建K均值模型,设定K=3
model = KMeans(n_clusters=3, random_state=42)
model.fit(X)  # 训练模型

# 预测簇标签
labels = model.labels_

# 可视化前两个特征
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow')
plt.xlabel('特征 1')
plt.ylabel('特征 2')
plt.title('K均值聚类')
plt.show()

解释

  1. 加载数据集:使用鸢尾花数据集。
  2. 创建模型:设置K=3的K均值模型并训练。
  3. 进行预测:获取每个样本的簇标签,并可视化前两个特征的聚类结果。

本文总结了多种常用的机器学习算法,包括线性回归、逻辑回归、决策树、K近邻、支持向量机、随机森林、梯度提升树和K均值聚类。通过简单的Python代码示例,我们展示了如何使用scikit-learn库实现这些算法。希望这篇文章能够帮助初学者理解机器学习的基本概念和算法,为进一步学习打下坚实的基础。

-- END --

关注“学姐带你玩AI”公众号,回复“聚类改进

领取机器学习聚类算法最新改进方案&代码

往期精彩阅读

👉kaggle比赛baseline合集

👉经典论文推荐合集

👉人工智能必读书籍

👉本专科硕博学习经验

评论区留言参与讨论嗷

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/175271
 
243 次点击