机器学习入门案例-鸢尾花

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 机器学习入门案例-鸢尾花

机器学习入门案例-鸢尾花


简介:本文讲解一个机器学习里面的经典案例,鸢尾花,鸢尾花案例是指一种虚构的情景,假设我们在一片花园里寻找鸢尾花。这种花的特点是两种颜色的花瓣呈现出鸢尾的形状,即黑白相间,如阴阳符号一般。我们的目标是通过花瓣的形状和颜色来识别这种特殊的花朵。


首先需要在jupyter中安装对应的环境。

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sklearn -i https://pypi.tuna.tsinghua.edu.cn/simple


数学公式


假设函数(Hypothesis Function):


逻辑回归的假设函数使用sigmoid函数将线性函数的输出转换为0到1之间的概率值:

image.png

其中,( z ) 是输入特征的线性组合,即:

image.png

损失函数(Loss Function):


我们使用对数似然损失函数(log-likelihood loss function)来衡量模型预测与真实标签之间的差距:

image.png

其中,hθ( x ) 是假设函数,y是真实标签,m 是样本数量。


参数更新:


我们使用梯度下降法来最小化损失函数,更新参数 θ

image.png

其中,α 是学习率。


Sigmoid函数:


Sigmoid函数用于将线性函数的输出映射到0到1之间的概率值,其数学公式如下:

image.png

实现代码


  1. Sigmoid 函数:Sigmoid 函数用于将线性模型的输出转换为概率值,其公式如下:

image.png

  1. 这里 ( z ) 是线性模型的输出,是输入特征的加权和加上偏置项。
  2. 逻辑回归模型的线性模型:在逻辑回归模型中,线性模型的表达式为:

image.png

其中,w0是偏置项,w1 , w2 , … , wn 是特征的权重参数,X1,X2,…,Xn 是输入特征。

最大似然估计(Maximum Likelihood Estimation,MLE):最大似然估计是用来估计模型参数的方法之一,在这个代码中,通过最大似然估计来求解逻辑回归模型的参数。最大似然估计的目标是最大化观测数据的联合概率密度函数,这里是最大化观测数据的概率,即使得观测数据出现的概率最大。


线性代数运算:代码中使用了一些线性代数运算,如矩阵的转置(X.T)、矩阵的乘法(X @ Y)、矩阵的逆(np.linalg.inv())等。

import numpy as np
import matplotlib.pyplot as plt


# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data[:, :2], (iris.target == 0).astype(int)  # 我们只使用两个特征和两个类别

# 绘制鸢尾花数据集分布图
plt.figure(figsize=(10, 6))
plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], label='Setosa (类别 0)', color='red', edgecolors='k')
plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], label='Non-Setosa (类别 1)', color='blue', edgecolors='k')

# 横轴(X轴):花萼长度(单位:厘米)。花萼是鸢尾花的一个部分,位于花朵的底部,通常是一朵花的最外层。花萼长度是从花朵的底部到顶部的最长距离,以厘米为单位进行测量。
# 纵轴(Y轴):花萼宽度(单位:厘米)。花萼宽度是花萼在最宽处的宽度,以厘米为单位进行测量。
plt.xlabel('花萼长度 (cm)')
plt.ylabel('花萼宽度 (cm)')
plt.title('鸢尾花数据集分布图')
plt.legend()
plt.grid(True)
plt.show()


# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 简单的逻辑回归实现
class LogisticRegression:
    def __init__(self):
        self.weights = None

    # Sigmoid函数
    def sigmoid(self, z):
        return 1 / (1 + np.exp(-z))

    # 拟合(训练)逻辑回归模型
    def fit(self, X, y):
        num_samples, num_features = X.shape
        self.weights = np.zeros(num_features + 1)  # 初始化参数为0,加1是因为需要加上偏置项
        X = np.hstack((np.ones((num_samples, 1)), X))  # 加入偏置项,即全部置为1

        # 使用最大似然估计求解参数(此处没有使用梯度下降,而是直接求解参数)
        self.weights = np.linalg.inv(X.T @ X) @ X.T @ y

    # 预测新样本的类别
    def predict(self, X):
        num_samples = X.shape[0]
        X = np.hstack((np.ones((num_samples, 1)), X))  # 加入偏置项

        # 计算线性模型的输出,并将其通过Sigmoid函数转换为概率
        linear_model = X @ self.weights
        y_predicted = self.sigmoid(linear_model)
        # 将概率值转换为类别标签(0或1)
        y_predicted_cls = [1 if i > 0.5 else 0 for i in y_predicted]
        return np.array(y_predicted_cls)

# 实例化和拟合逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测测试集样本的类别
y_pred_test = model.predict(X_test)

# 计算测试集准确率
test_accuracy = accuracy_score(y_test, y_pred_test)
print(f"测试集准确率: {test_accuracy:.2f}")

# 在训练集和测试集上进行预测
train_predictions = model.predict(X_train)
test_predictions = model.predict(X_test)

# 计算逻辑回归模型的准确率
train_accuracy = accuracy_score(y_train, train_predictions)
test_accuracy = accuracy_score(y_test, test_predictions)

print("\n逻辑回归模型 - 训练集准确率:", train_accuracy)
print("逻辑回归模型 - 测试集准确率:", test_accuracy)

# 计算MSE
train_mse = mean_squared_error(y_train, train_predictions)
test_mse = mean_squared_error(y_test, test_predictions)
print("\n逻辑回归模型 - 训练集 MSE:", train_mse)
print("逻辑回归模型 - 测试集 MSE:", test_mse)

# 输出训练得到的参数
print("\n逻辑回归模型参数:", model.weights)

# 输出逻辑回归模型的表达式
print("逻辑回归模型公式: y = ", end='')
for i, w in enumerate(model.weights):
    if i == 0:
        print(f"{w:.2f}", end='')
    else:
        print(f" + {w:.2f} * X[{i}]", end='')
print()

import matplotlib.pyplot as plt

# 设置中文字体
plt.rcParams['font.family'] = ['Arial Unicode MS']

# 绘制逻辑回归模型的预测结果轮廓图
plt.figure(figsize=(10, 6))

# 生成网格点
xx, yy = np.meshgrid(np.linspace(X[:, 0].min(), X[:, 0].max(), 100),
                     np.linspace(X[:, 1].min(), X[:, 1].max(), 100))

# 使用模型预测网格点的类别
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 绘制轮廓图
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)

# 绘制训练集和测试集的真实结果
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='coolwarm', label='训练集真实结果')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='coolwarm', marker='x', label='测试集真实结果')

plt.xlabel('花萼长度 (cm)')
plt.ylabel('花萼宽度 (cm)')
plt.title('鸢尾花逻辑回归模型预测结果轮廓图')
plt.colorbar(label='类别')
plt.legend()
plt.grid(True)
plt.show()


  • 运行结果


  • 运行结果分析

测试集准确率为0.63,这表示模型在未见过的数据上的预测准确率为63%。

训练集准确率为0.53,这表示模型在训练集上的预测准确率为53%。

训练集 MSE 为0.47,测试集 MSE 为0.37,这些是模型在训练集和测试集上的均方误差,即模型预测值与实际值之间的平方差的均值。


逻辑回归模型参数为:

  • 偏置项为0.72。
  • 特征1的系数为-0.37。
  • 特征2的系数为0.58。

逻辑回归模型的表达式为: image.png

这个表达式描述了模型如何根据输入特征 X [ 1 ]和 X [ 2 ]来预测输出类别 y。


根据给定的参数:

  • 偏置项为 0.72 (β₀ = 0.72)
  • 特征1的系数为 -0.37 (β₁ = -0.37)
  • 特征2的系数为 0.58 (β₂ = 0.58)我们可以代入逻辑回归模型公式计算类别 0 和类别 1 的概率。


逻辑回归模型的公式为:

image.png

假设我们有以下特征值:

  • 花萼长度 (特征1) = 5.0 cm
  • 花萼宽度 (特征2) = 3.5 cm

代入公式进行计算:

image.png

  • 计算演示

首先,我们计算线性模型的输出:

image.png

然后,我们将z的值代入 sigmoid 函数计算类别 0 的概率:

image.png

最后,我们计算类别 1 的概率:

image.png

因此,根据给定的参数和特征值,类别 0 的概率约为 0.7116,而类别 1 的概率约为 0.2884。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
28天前
|
机器学习/深度学习 数据采集 算法
深入了解机器学习:从入门到应用
【10月更文挑战第6天】深入了解机器学习:从入门到应用
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
21 2
|
12天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
23 1
|
23天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
18 1
|
24天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
46 2
|
29天前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
23 4
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
359 1
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
1月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
1月前
|
机器学习/深度学习 API
机器学习入门(七):线性回归原理,损失函数和正规方程
机器学习入门(七):线性回归原理,损失函数和正规方程

热门文章

最新文章

  • 1
    机器学习实战:房价预测项目
    201
  • 2
    强化学习(Reinforcement Learning, RL)** 是一种机器学习技术,其中智能体(Agent)通过与环境(Environment)交互来学习如何执行决策以最大化累积奖励。
    74
  • 3
    集成学习(Ensemble Learning)是一种机器学习技术,它通过将多个学习器(或称为“基学习器”、“弱学习器”)的预测结果结合起来,以提高整体预测性能。
    218
  • 4
    `sklearn.metrics`是scikit-learn库中用于评估机器学习模型性能的模块。它提供了多种评估指标,如准确率、精确率、召回率、F1分数、混淆矩阵等。这些指标可以帮助我们了解模型的性能,以便进行模型选择和调优。
    453
  • 5
    在机器学习和数据科学中,数据预处理是一个至关重要的步骤。数据规范化(或称为特征缩放)是预处理的一种常见技术,它可以帮助我们改进模型的性能。`sklearn.preprocessing`模块提供了多种数据规范化的方法,其中`StandardScaler`和`MinMaxScaler`是最常用的两种。
    88
  • 6
    在人工智能和机器学习的领域中,语音识别(Speech Recognition,SR)是一个重要的研究方向。它旨在将人类的语音转换为计算机可读的文本。
    103
  • 7
    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
    119
  • 8
    驾驭大数据洪流:Pandas与NumPy在高效数据处理与机器学习中的核心作用
    83
  • 9
    探索机器学习在图像识别中的应用
    52
  • 10
    智能化运维:机器学习在故障预测和自动化修复中的应用
    65