算法学习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()
相关推荐
Blossom.11844 分钟前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
恰薯条的屑海鸥2 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
郄堃Deep Traffic2 小时前
机器学习+城市规划第十四期:利用半参数地理加权回归来实现区域带宽不同的规划任务
人工智能·机器学习·回归·城市规划
int型码农2 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT3 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面3 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked933 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,3 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
积极向上的向日葵3 小时前
有效的括号题解
数据结构·算法·
GIS小天3 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票