探秘机器学习算法:智慧背后的代码逻辑

news/2024/11/3 3:10:41 标签: 机器学习

1、 线性回归

线性回归是预测连续变量的一种简单而有效的方法。其数学模型假设因变量 y 与自变量 x 之间存在线性关系,用公式表示为:

在这里插入图片描述

Python代码实现

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# 创建数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1, 2, 1.3, 3.75, 2.25])

# 创建模型并训练
model = LinearRegression()
model.fit(X, y)

# 预测
predicted = model.predict(X)

# 可视化
plt.scatter(X, y, color='black')
plt.plot(X, predicted, color='blue', linewidth=2)
plt.xlabel("X")
plt.ylabel("y")
plt.title("Linear Regression")
plt.show()

2、 逻辑回归

逻辑回归用于分类问题,其目标是预测数据点属于某一类的概率。模型输出值在 000 到 111 之间。公式为:

在这里插入图片描述

Python代码实现

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np

# 加载数据集
data = load_iris()
X = data.data[:100, :2]  # 只取两个特征方便可视化
y = data.target[:100]

# 创建模型并训练
model = LogisticRegression()
model.fit(X, y)

# 可视化决策边界
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("Logistic Regression Decision Boundary")
plt.show()

3 、K近邻算法 (KNN)

KNN是一个简单的分类算法,其核心思想是通过找出距离最近的K个邻居来判断类别。适用于非线性分类问题,但当数据量较大时计算量会增大。

Python代码实现

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np

# 加载数据集
data = load_iris()
X = data.data[:, :2]
y = data.target

# 创建模型并训练
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X, y)

# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("K-Nearest Neighbors Decision Boundary")
plt.show()

4、 支持向量机 (SVM)

支持向量机通过找到一个超平面将数据分开,以最大化边界的间隔。适用于线性或非线性分类问题,依赖于合适的核函数。

Python代码实现

from sklearn.svm import SVC
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt

# 加载数据集
data = load_iris()
X = data.data[:, :2]  # 取前两个特征
y = data.target

# 创建模型并训练
model = SVC(kernel='linear')
model.fit(X, y)

# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("Support Vector Machine Decision Boundary")
plt.show()

5、 决策树

决策树通过递归地将数据划分成多个子集来进行分类。其关键在于选择特征并确定划分点,直到每个节点满足条件或达到最大深度。

Python代码实现

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np

# 加载数据集
data = load_iris()
X = data.data[:, :2]
y = data.target

# 创建模型并训练
model = DecisionTreeClassifier(max_depth=3)
model.fit(X, y)

# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("Decision Tree Decision Boundary")
plt.show()

6、 随机森林

随机森林通过组合多个决策树来增强分类性能。每棵树独立训练,最终分类结果取投票的结果。

Python代码实现

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt

# 加载数据集
data = load_iris()
X = data.data[:, :2]
y = data.target

# 创建模型并训练
model = RandomForestClassifier(n_estimators=100, max_depth=3, random_state=0)
model.fit(X, y)

# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

http://www.niftyadmin.cn/n/5735925.html

相关文章

T-Mobile股票分析:T-Mobile的股价还能继续上涨吗?

猛兽财经核心观点: (1)今年以来T-Mobile股价已经上涨42%。 (2)强劲的第三季度业绩:盈利超过预期,提高了全年指引,扩大了客户群和合作伙伴关系。 (3)猛兽财经对…

初识二叉树( 二)

初识二叉树 二 实现链式结构二叉树前中后序遍历遍历规则代码实现 结点个数以及高度等层序遍历判断是否为完全二叉树 实现链式结构二叉树 ⽤链表来表示⼀棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针…

大型语言模型(LLM)的小型化研究进展

2024年,大型语言模型(LLM)的小型化研究取得了显著进展,主要采用以下几种方法实现: 模型融合:通过将多个模型或检查点合并为一个单一模型,减少资源消耗并提升整体性能。例如,《WARM: …

基于springboot的社区团购系统设计与实现

一、项目背景 网络交易(Electronic Commerce):是指实现整个贸易过程中各阶段的贸易活动的电子化。网络交易是一种多技术的集合体。其业务可包括:信息交换、售后服务、销售、电子支付、运输、组建虚拟企业、公司和贸易伙伴可以共同…

软考:大数据架构设计

大数据总结 大数据处理系统的特征 1、鲁棒性和容错性 2、低延迟读取和更新能力 3、横向扩容 4、通用性 5、延展性 6、即席查询能力 7、最少维护能力 8、可调试性 Lambda架构 批处理层 存储数据集和生成Batch View 管理主数据集,原始的,不可变的&…

C++教程(004):程序流程结构之选择结构

4 程序流程结构 C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。 顺序结构:程序按顺序执行,不发生跳转。选择结构:程序依据条件是否满足,有选择地执行相应功能。循环结构:程序依据条件是否满足,循环多次执行某段代码。4.1 选择结构 4.1.1 if语句 …

matlab图像处理(1)

注意: 读取图像文件时需若图像不在工程目录文件下,需在代码中表明其其他路径的具体位置及名称

Spring Boot与gRPC的整合

一、gRPC的介绍 在gRPC中,客户机应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您更容易创建分布式应用程序和服务。与许多RPC系统一样,gRPC基于定义服务的思想,指定可以远程调用的…