算法学习9——机器学习算法(1)

机器学习是人工智能的一个分支,通过从数据中学习模型来进行预测或决策。本文将介绍几种常见的机器学习算法,包括线性回归、逻辑回归、决策树、支持向量机和K最近邻,并提供每种算法的Python代码示例。

1. 线性回归(Linear Regression)

线性回归是一种用于建模变量之间线性关系的回归分析方法。其目的是找到最优的线性方程来预测因变量的值。

实现过程:

  1. 选择一组特征和目标变量。
  2. 通过最小化均方误差(MSE)来拟合线性模型。
  3. 使用拟合的模型进行预测。

Python代码:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 生成示例数据
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([1, 3, 2, 3, 5])

# 创建线性回归模型并拟合数据
model = LinearRegression()
model.fit(X, y)

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

# 绘制数据点和拟合线
plt.scatter(X, y, color='blue')
plt.plot(X, y_pred, color='red')
plt.title('Linear Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.show()

2. 逻辑回归(Logistic Regression)

逻辑回归是一种用于分类问题的回归分析方法。它通过使用逻辑函数将线性回归的输出映射到0, 1之间,从而进行分类。

实现过程:

  1. 选择一组特征和目标变量。
  2. 使用逻辑函数拟合线性模型。
  3. 通过最大化似然函数来估计模型参数。
  4. 使用拟合的模型进行分类预测。

Python代码:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression

# 生成示例数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])

# 创建逻辑回归模型并拟合数据
model = LogisticRegression()
model.fit(X, y)

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

# 绘制数据点和决策边界
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict_proba(X)[:, 1], color='red')
plt.title('Logistic Regression')
plt.xlabel('X')
plt.ylabel('Probability')
plt.show()

3. 决策树(Decision Tree)

决策树是一种树状结构的监督学习算法。它通过对特征进行条件判断,将数据逐步划分成多个子集,从而进行分类或回归。

实现过程:

  1. 选择一个特征进行划分,最大化信息增益或基尼指数。
  2. 对每个子集递归地应用决策树算法。
  3. 直到满足停止条件(如达到最大深度或子集纯度)为止。

Python代码:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

# 生成示例数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])
y = np.array([0, 0, 1, 1, 1])

# 创建决策树模型并拟合数据
model = DecisionTreeClassifier()
model.fit(X, y)

# 可视化决策树
plt.figure(figsize=(10, 6))
tree.plot_tree(model, filled=True)
plt.title('Decision Tree')
plt.show()

4. 支持向量机(Support Vector Machine, SVM)

支持向量机是一种用于分类和回归的监督学习算法。它通过找到一个最佳的超平面来最大化不同类别之间的间隔,从而进行分类。

实现过程:

  1. 选择一组特征和目标变量。
  2. 使用优化算法找到最大化间隔的超平面。
  3. 通过超平面将数据点分为不同类别。

Python代码:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC

# 生成示例数据
X, y = datasets.make_blobs(n_samples=100, centers=2, random_state=6)

# 创建支持向量机模型并拟合数据
model = SVC(kernel='linear')
model.fit(X, y)

# 绘制数据点和决策边界
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)

# 获取超平面
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = model.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])

plt.title('Support Vector Machine')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

5. K最近邻(K-Nearest Neighbors, KNN)

K最近邻是一种用于分类和回归的非参数监督学习算法。它通过计算待分类样本与训练样本集中所有样本的距离,选择距离最近的k个样本,进行分类或回归。

实现过程:

  1. 选择参数k和距离度量方法。
  2. 计算待分类样本与训练样本集所有样本的距离。
  3. 选择距离最近的k个样本,进行投票或平均,得到预测结果。

Python代码:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier

# 生成示例数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])
y = np.array([0, 0, 1, 1, 1])

# 创建KNN模型并拟合数据
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X, y)

# 进行预测
X_test = np.array([[2, 2], [3, 5]])
y_pred = model.predict(X_test)

# 绘制数据点和预测结果
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, s=100, marker='*', cmap=plt.cm.Paired)

plt.title('K-Nearest Neighbors')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
相关推荐
reikocao8 分钟前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz1 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·1 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
是main不是漫2 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
Nuanyt2 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
深圳市快瞳科技有限公司4 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
叼烟扛炮4 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
叼烟扛炮4 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
songyuc5 小时前
【Manskill3】TableSceneBuilder学习笔记
pytorch·笔记·学习
专注仿真5 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法