k-均值聚类(k-Means Clustering)详解

news2025/1/29 13:49:22

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:机器学习分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:k-均值聚类(k-Means Clustering)详解

文章目录

    • 引言
    • 一、基本原理
      • 1. 数据点与簇的定义
      • 2. 相似度度量
      • 3. 簇的初始化
      • 4. 分配步骤
      • 5. 更新步骤
      • 6. 迭代与收敛
      • 7. 优缺点
    • 二、数学模型
      • 1. 目标函数
      • 2. 簇中心的计算
      • 3. 数据点的分配
      • 4. 收敛条件
      • 5. 算法步骤的数学表达
      • 6. 复杂度分析
      • 7. 优缺点的数学视角
    • 三、实现步骤
      • 1. 初始化
      • 2. 分配步骤
      • 3. 更新步骤
      • 4. 迭代过程
      • 5. 输出结果
      • 6. 复杂度分析
      • 7. 注意事项
    • 四、应用场景
      • 1. 市场细分
      • 2. 图像压缩
      • 3. 社交网络分析
      • 4. 异常检测
    • 总结

在这里插入图片描述

引言

  在当今数据驱动的时代,数据分析已成为各行各业决策的重要基础。随着数据量的激增,如何有效地从中提取有价值的信息成为了一个亟待解决的问题。聚类分析作为一种无监督学习方法,能够将大量数据点根据其特征进行分组,从而揭示数据的内在结构和模式。在众多聚类算法中,k-均值聚类因其简单易懂、计算效率高而广泛应用于市场分析、图像处理、社交网络研究等多个领域。

  本文将深入探讨k-均值聚类的基本原理、数学模型、实现步骤以及实际应用场景,帮助读者全面理解这一强大工具的核心概念和应用价值。无论你是数据科学的初学者还是经验丰富的从业者,掌握k-均值聚类都将为你的数据分析工作提供重要的支持和启发。

一、基本原理

  k-均值聚类(k-Means Clustering)是一种广泛使用的无监督学习算法,旨在将数据集划分为 k k k 个簇(clusters),使得同一簇内的数据点尽可能相似,而不同簇之间的数据点尽可能不同。其基本原理可以从以下几个方面进行详细阐述:

1. 数据点与簇的定义

  在k-均值聚类中,数据点是指我们希望进行聚类的个体,通常用向量表示。每个数据点可以有多个特征(dimensions),例如在二维空间中,一个数据点可以表示为 ( x , y ) (x, y) (x,y)。簇则是由一组相似的数据点组成的集合,簇的中心(centroid)是该簇中所有数据点的均值。

2. 相似度度量

  k-均值聚类通常使用欧几里得距离来衡量数据点之间的相似度。对于两个数据点 x i x_i xi x j x_j xj,其欧几里得距离定义为:

d ( x i , x j ) = ∑ m = 1 n ( x i m − x j m ) 2 d(x_i, x_j) = \sqrt{\sum_{m=1}^{n} (x_{im} - x_{jm})^2} d(xi,xj)=m=1n(ximxjm)2

  其中 n n n 是特征的维度, x i m x_{im} xim x j m x_{jm} xjm 分别是数据点 x i x_i xi x j x_j xj 在第 m m m 个特征上的值。通过计算距离,算法能够将数据点分配到离其最近的簇中心。

3. 簇的初始化

  k-均值聚类的第一步是选择 k k k 个初始簇中心。常见的初始化方法包括随机选择数据点作为初始中心,或使用更复杂的方法如k-means++,以提高聚类效果和收敛速度。初始簇中心的选择对最终聚类结果有重要影响,因此在实际应用中,通常会进行多次初始化并选择效果最好的结果。

4. 分配步骤

  在每次迭代中,算法会将每个数据点分配到离其最近的簇中心。具体而言,对于每个数据点 x j x_j xj,计算其与所有簇中心的距离,并将其分配到距离最小的簇 C i C_i Ci 中:

C i = { x j ∣ d ( x j , μ i ) ≤ d ( x j , μ k ) , ∀ k ≠ i } C_i = \{ x_j | d(x_j, \mu_i) \leq d(x_j, \mu_k), \forall k \neq i \} Ci={xjd(xj,μi)d(xj,μk),k=i}

  这里, μ i \mu_i μi 是第 i i i 个簇的中心点。通过这种方式,算法逐步形成 k k k 个簇。

5. 更新步骤

  在完成数据点的分配后,算法会重新计算每个簇的中心点。新的簇中心是该簇内所有数据点的均值,计算公式为:

μ i = 1 ∣ C i ∣ ∑ x j ∈ C i x j \mu_i = \frac{1}{|C_i|} \sum_{x_j \in C_i} x_j μi=Ci1xjCixj

  其中 ∣ C i ∣ |C_i| Ci 是簇 C i C_i Ci 中数据点的数量。通过更新簇中心,算法能够更好地反映数据的分布。

6. 迭代与收敛

  k-均值聚类的过程是一个迭代的过程,分配步骤和更新步骤交替进行。算法会持续迭代,直到满足收敛条件,通常是簇中心不再变化或达到预设的最大迭代次数。收敛的结果是一个稳定的簇划分,能够有效地反映数据的结构。

7. 优缺点

  • 优点

    • 简单易懂,易于实现。
    • 计算效率高,适合处理大规模数据集。
    • 对于球状簇的聚类效果较好。
  • 缺点

    • 需要预先指定 k k k 的值,可能影响聚类效果。
    • 对初始簇中心敏感,可能导致局部最优解。
    • 对噪声和异常值敏感,可能影响聚类结果。

二、数学模型

  k-均值聚类的数学模型主要围绕目标函数的定义和优化过程展开。该模型的核心在于通过最小化目标函数来实现数据点的有效聚类。以下是对k-均值聚类数学模型的详细阐述。

1. 目标函数

  k-均值聚类的目标是最小化簇内数据点到其簇中心的距离平方和。目标函数 J J J 定义如下:

J = ∑ i = 1 k ∑ x j ∈ C i ∥ x j − μ i ∥ 2 J = \sum_{i=1}^{k} \sum_{x_j \in C_i} \| x_j - \mu_i \|^2 J=i=1kxjCixjμi2

其中:

  • J J J 是目标函数,表示所有簇内数据点到其簇中心的距离平方和。
  • k k k 是簇的数量。
  • C i C_i Ci 是第 i i i 个簇,包含所有属于该簇的数据点。
  • x j x_j xj 是数据点。
  • μ i \mu_i μi 是第 i i i 个簇的中心点。

2. 簇中心的计算

  在k-均值聚类中,簇中心 μ i \mu_i μi 的计算是通过对簇内所有数据点的均值进行求解。具体公式为:

μ i = 1 ∣ C i ∣ ∑ x j ∈ C i x j \mu_i = \frac{1}{|C_i|} \sum_{x_j \in C_i} x_j μi=Ci1xjCixj

  这里, ∣ C i ∣ |C_i| Ci 表示簇 C i C_i Ci 中数据点的数量。通过这种方式,簇中心能够反映簇内数据点的整体特征。

3. 数据点的分配

  在每次迭代中,算法会将每个数据点分配到离其最近的簇中心。对于每个数据点 x j x_j xj,计算其与所有簇中心的距离,并将其分配到距离最小的簇 C i C_i Ci 中。具体过程如下:

C i = { x j ∣ d ( x j , μ i ) ≤ d ( x j , μ k ) , ∀ k ≠ i } C_i = \{ x_j | d(x_j, \mu_i) \leq d(x_j, \mu_k), \forall k \neq i \} Ci={xjd(xj,μi)d(xj,μk),k=i}

  其中, d ( x j , μ i ) d(x_j, \mu_i) d(xj,μi) 表示数据点 x j x_j xj 到簇中心 μ i \mu_i μi 的距离,通常使用欧几里得距离进行计算。

4. 收敛条件

k-均值聚类的迭代过程会持续进行,直到满足收敛条件。常见的收敛条件包括:

  • 簇中心不再变化,即 μ i ( t ) = μ i ( t + 1 ) \mu_i^{(t)} = \mu_i^{(t+1)} μi(t)=μi(t+1),其中 t t t 表示迭代次数。
  • 达到预设的最大迭代次数。

5. 算法步骤的数学表达

k-均值聚类的算法步骤可以用以下数学表达来描述:

  1. 初始化:随机选择 k k k 个数据点作为初始簇中心 μ i ( 0 ) \mu_i^{(0)} μi(0)

  2. 迭代过程

    • 分配步骤
      C i ( t ) = { x j ∣ d ( x j , μ i ( t ) ) ≤ d ( x j , μ k ( t ) ) , ∀ k ≠ i } C_i^{(t)} = \{ x_j | d(x_j, \mu_i^{(t)}) \leq d(x_j, \mu_k^{(t)}), \forall k \neq i \} Ci(t)={xjd(xj,μi(t))d(xj,μk(t)),k=i}
    • 更新步骤
      μ i ( t + 1 ) = 1 ∣ C i ( t ) ∣ ∑ x j ∈ C i ( t ) x j \mu_i^{(t+1)} = \frac{1}{|C_i^{(t)}|} \sum_{x_j \in C_i^{(t)}} x_j μi(t+1)=Ci(t)1xjCi(t)xj
  3. 收敛判断:检查是否满足收敛条件。

6. 复杂度分析

k-均值聚类的时间复杂度主要由以下几个部分组成:

  • 初始化:选择 k k k 个初始簇中心,时间复杂度为 O ( k ) O(k) O(k)
  • 分配步骤:对于每个数据点,需要计算与 k k k 个簇中心的距离,时间复杂度为 O ( n ⋅ k ) O(n \cdot k) O(nk),其中 n n n 是数据点的数量。
  • 更新步骤:计算每个簇的均值,时间复杂度为 O ( n ) O(n) O(n)

因此,k-均值聚类的总体时间复杂度为 O ( n ⋅ k ⋅ t ) O(n \cdot k \cdot t) O(nkt),其中 t t t 是迭代次数。

7. 优缺点的数学视角

  • 优点

    • 计算简单,易于实现。
    • 对于大规模数据集,计算效率高。
  • 缺点

    • 需要预先指定 k k k 的值,可能导致聚类效果不佳。
    • 对初始簇中心敏感,可能导致局部最优解。
    • 对噪声和异常值敏感,可能影响聚类结果。

三、实现步骤

  k-均值聚类的实现步骤可以分为多个阶段,从初始化到迭代更新,直到收敛。以下是对k-均值聚类实现步骤的详细阐述。

1. 初始化

在k-均值聚类的第一步,需要选择 k k k 个初始簇中心。常见的初始化方法有:

  • 随机选择:从数据集中随机选择 k k k 个数据点作为初始簇中心。这种方法简单,但可能导致聚类效果不佳。

  • k-means++:一种改进的初始化方法,通过选择距离现有簇中心较远的数据点来初始化簇中心。这种方法可以提高聚类的效果和收敛速度。

2. 分配步骤

在初始化完成后,进入迭代过程的第一步——分配步骤。具体步骤如下:

  1. 计算距离:对于每个数据点 x j x_j xj,计算其与所有簇中心 μ i \mu_i μi 的距离,通常使用欧几里得距离:

    d ( x j , μ i ) = ∑ m = 1 n ( x j m − μ i m ) 2 d(x_j, \mu_i) = \sqrt{\sum_{m=1}^{n} (x_{jm} - \mu_{im})^2} d(xj,μi)=m=1n(xjmμim)2

  2. 分配数据点:将每个数据点分配到距离其最近的簇中心。具体的分配规则为:

    C i = { x j ∣ d ( x j , μ i ) ≤ d ( x j , μ k ) , ∀ k ≠ i } C_i = \{ x_j | d(x_j, \mu_i) \leq d(x_j, \mu_k), \forall k \neq i \} Ci={xjd(xj,μi)d(xj,μk),k=i}

    这一步骤确保每个数据点都被分配到最合适的簇中。

3. 更新步骤

完成数据点的分配后,进入更新步骤。此步骤的目标是计算每个簇的新中心点。具体步骤如下:

  1. 计算新中心:对于每个簇 C i C_i Ci,计算其新的簇中心 μ i \mu_i μi,公式为:

    μ i = 1 ∣ C i ∣ ∑ x j ∈ C i x j \mu_i = \frac{1}{|C_i|} \sum_{x_j \in C_i} x_j μi=Ci1xjCixj

    这里, ∣ C i ∣ |C_i| Ci 是簇 C i C_i Ci 中数据点的数量。通过这种方式,新的簇中心能够更好地反映簇内数据点的分布。

4. 迭代过程

分配步骤和更新步骤交替进行,形成一个迭代过程。具体流程如下:

  1. 重复分配和更新:在每次迭代中,重复执行分配步骤和更新步骤,直到满足收敛条件。

  2. 收敛条件:收敛条件通常包括:

    • 簇中心不再变化,即 μ i ( t ) = μ i ( t + 1 ) \mu_i^{(t)} = \mu_i^{(t+1)} μi(t)=μi(t+1),其中 t t t 表示迭代次数。
    • 达到预设的最大迭代次数。

5. 输出结果

  当算法收敛后,输出最终的簇划分结果。每个数据点将被标记为其所属的簇,簇中心也将被记录下来。这些结果可以用于后续的数据分析和可视化。

6. 复杂度分析

k-均值聚类的时间复杂度主要由以下几个部分组成:

  • 初始化:选择 k k k 个初始簇中心,时间复杂度为 O ( k ) O(k) O(k)
  • 分配步骤:对于每个数据点,需要计算与 k k k 个簇中心的距离,时间复杂度为 O ( n ⋅ k ) O(n \cdot k) O(nk),其中 n n n 是数据点的数量。
  • 更新步骤:计算每个簇的均值,时间复杂度为 O ( n ) O(n) O(n)

因此,k-均值聚类的总体时间复杂度为 O ( n ⋅ k ⋅ t ) O(n \cdot k \cdot t) O(nkt),其中 t t t 是迭代次数。

7. 注意事项

在实现k-均值聚类时,需要注意以下几点:

  • 选择合适的 k k k:k的选择对聚类效果有重要影响。可以使用肘部法则(Elbow Method)等方法来确定最佳的 k k k 值。
  • 处理异常值:k-均值聚类对噪声和异常值敏感,可能影响聚类结果。在数据预处理阶段,可以考虑去除异常值。
  • 多次运行:由于k-均值聚类对初始簇中心敏感,建议多次运行算法并选择效果最好的结果。

四、应用场景

  k-均值聚类因其简单性和高效性,广泛应用于多个领域。以下是一些具体的应用场景,并结合项目代码进行详细阐述。

1. 市场细分

  应用场景:在市场营销中,企业可以利用k-均值聚类对客户进行细分,以便制定更有针对性的营销策略。例如,基于客户的购买行为和偏好,将客户分为不同的群体。

  项目代码示例

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 读取客户数据
data = pd.read_csv('customer_data.csv')

# 选择特征进行聚类
features = data[['Annual Income (k$)', 'Spending Score (1-100)']]

# 数据标准化
scaler = StandardScaler()
scaled_features = scaler.fit_transform(features)

# 确定最佳的k值(肘部法则)
inertia = []
k_values = range(1, 11)
for k in k_values:
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(scaled_features)
    inertia.append(kmeans.inertia_)

# 绘制肘部法则图
plt.plot(k_values, inertia, marker='o')
plt.title('Elbow Method for Optimal k')
plt.xlabel('Number of clusters (k)')
plt.ylabel('Inertia')
plt.show()

# 选择k=3进行聚类
optimal_k = 3
kmeans = KMeans(n_clusters=optimal_k, random_state=42)
data['Cluster'] = kmeans.fit_predict(scaled_features)

# 可视化聚类结果
plt.scatter(data['Annual Income (k$)'], data['Spending Score (1-100)'], c=data['Cluster'], cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', label='Centroids')
plt.title('Customer Segmentation')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()

2. 图像压缩

  应用场景:在图像处理领域,k-均值聚类可以用于图像压缩。通过将图像中的颜色聚类,减少颜色数量,从而实现图像的压缩。

  项目代码示例

import numpy as np
import cv2
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 读取图像
image = cv2.imread('image.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 将图像数据转换为二维数组
pixel_values = image.reshape((-1, 3))
pixel_values = np.float32(pixel_values)

# 确定最佳的k值(例如k=5)
k = 5
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(pixel_values)

# 替换每个像素的颜色为其对应簇的中心颜色
centers = np.uint8(kmeans.cluster_centers_)
labels = kmeans.labels_
compressed_image = centers[labels].reshape(image.shape)

# 显示原始图像和压缩后的图像
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image)
plt.axis('off')

plt.subplot(1, 2, 2)
plt.title('Compressed Image')
plt.imshow(compressed_image)
plt.axis('off')

plt.show()

3. 社交网络分析

  应用场景:在社交网络分析中,k-均值聚类可以用于识别社交网络中的社区结构,帮助理解用户之间的关系。

  项目代码示例

import pandas as pd
import numpy as np
import networkx as nx
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 创建社交网络图
G = nx.Graph()
edges = [(1, 2), (1, 3), (2, 4), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]
G.add_edges_from(edges)

# 计算节点的特征(例如度数)
degree_dict = dict(G.degree())
features = np.array(list(degree_dict.values())).reshape(-1, 1)

# 使用k-均值聚类
k = 3
kmeans = KMeans(n_clusters=k, random_state=42)
labels = kmeans.fit_predict(features)

# 可视化社交网络及其聚类结果
pos = nx.spring_layout(G)
plt.figure(figsize=(8, 6))
nx.draw(G, pos, with_labels=True, node_color=labels, cmap='viridis', node_size=800)
plt.title('Social Network Clustering')
plt.show()

4. 异常检测

  应用场景:k-均值聚类可以用于异常检测,通过聚类正常数据点,识别与众不同的异常点。

  项目代码示例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 生成示例数据
np.random.seed(42)
normal_data = np.random.normal(loc=0, scale=1, size=(100, 2))
outliers = np.array([[5, 5], [6, 6], [7, 7]])
data = np.vstack((normal_data, outliers))

# 使用k-均值聚类
k = 2
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(data)
labels = kmeans.labels_

# 可视化聚类结果
plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis', label='Data Points')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', label='Centroids')
plt.title('Anomaly Detection using k-Means')
plt.legend()
plt.show()

# 检测异常点
for i in range(len(data)):
    if labels[i] == 1:  # 假设簇1是正常数据,簇0是异常数据
        print(f"Anomaly detected: {data[i]}")

总结

  k-均值聚类作为一种经典的无监督学习算法,以其简单易懂和高效的计算性能,广泛应用于多个领域,包括市场细分、图像压缩、社交网络分析和异常检测等。通过对数据点的聚类,k-均值算法能够揭示数据的内在结构,帮助决策者制定更为精准的策略。在本文中,我们详细探讨了k-均值聚类的基本原理、数学模型、实现步骤以及具体的应用场景,并通过项目代码示例展示了其实际应用的有效性。

  尽管k-均值聚类在许多场景中表现出色,但其对初始簇中心的敏感性和对噪声的脆弱性也提醒我们在使用时需谨慎选择参数和预处理数据。未来,随着数据科学和机器学习技术的不断发展,k-均值聚类将继续发挥重要作用,同时也将与其他更复杂的算法结合,推动数据分析的深入与创新。希望本文能够为读者提供一个全面的理解,激发对k-均值聚类及其应用的进一步探索。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复合机器人为生产提供精准的建议和决策支持

在现代化生产的浪潮中,智能复合机器人以其卓越的性能和高度智能化特点,正成为保障生产安全与可靠性的重要力量。 智能复合机器人具备精确的感知、判断和决策能力,能够在复杂的生产环境中自主导航、精确操作,避免了人为因素可能导致…

AI前沿分析:Github Copilot 推出免费版本,AI + 编程更高效!

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、GitHub Copilot:AI编程的“革命性”助力二、免费版本上线:AI编程的普及时代&…

git使用教程(超详细)-透彻理解git

一.核心基础 核心概念有六个 首先请把与svn有关的一切概念暂时从你的脑海中移除掉,我们要重新认识本文所讲述的所有概念。这非常重要。 1.worktree worktree是一个目录,你在这里对文件进行增加、删除、修改。也就是我们常说的工作区。在git中worktree…

【优选算法---分治】快速排序三路划分(颜色分类、快速排序、数组第K大的元素、数组中最小的K个元素)

一、颜色分类 题目链接: 75. 颜色分类 - 力扣(LeetCode) 题目介绍: 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序…

第六周作业

完成的作业: 1、自建yum仓库,分别为网络源和本地源 执行步骤:将光盘挂载到目录设置为本地源。 再将光盘挂载到http目录下实现ip访问,实现网络源。 编辑/etc/yum.repos.d/rocky.repo修改源 [base] namecd baseurlfile:///mnt/cd/…

PHP木马编写

一、最简单的一句话木马 <?php eval($_REQUEST[cmd]); ?> 1. <?php 和 ?> <?php 和 ?> 是 PHP 代码的开始和结束标记&#xff0c;表示 PHP 代码块的范围。 2. eval() eval() 是 PHP 中的一个内建函数&#xff0c;用来执行字符串类型的 PHP 代码。…

面试题整理3----nc命令的常见用法

面试题整理3----nc命令的常见用法 1. NC是什么2. NC的常用参数2.1 开启指定端口TCP监听(-l小写的L)2.2 测试端口是否能访问(-v)2.3 开启指定端口UDP监听(-u)2.4 端口扫描(-z)2.5 指定超时时间(-w)2.6 指定本地端口号连接(-p)2.7 指定的命令(-e) 1. NC是什么 nc&#xff08;Net…

智源大模型通用算子库FlagGems四大能力升级 持续赋能AI系统开源生态

FlagGems是由智源研究院于2024年6月推出的面向多种AI芯片的开源大模型通用算子库。FlagGems使用Triton语言开发&#xff0c;在Triton生态开源开放的基础上&#xff0c;为多种AI芯片提供开源、统一、高效的算子层生态接入方案。FlagGems沿着统一的中间语言、统一的算子接口和统一…

每天40分玩转Django:Django部署

Django部署 一、今日学习内容概述 学习模块重要程度主要内容生产环境配置⭐⭐⭐⭐⭐settings配置、环境变量WSGI服务器⭐⭐⭐⭐⭐Gunicorn配置、性能优化Nginx配置⭐⭐⭐⭐反向代理、静态文件安全设置⭐⭐⭐⭐⭐SSL证书、安全选项 二、生产环境配置 2.1 项目结构调整 mypr…

JDK21执行java -jar xxx.jar 文件时 “An unexpected error occurred” 问题处理

背景介绍&#xff1a;因langchain4j最新版本&#xff08;>0.36.0&#xff09;&#xff08;Min JDK version has been upgraded to 17&#xff09;需JDK17起&#xff0c;故直接使用Amazon Corretto JDK 21作为基础镜像。 在使用 JDK21 进行开发或运行相关应用时&#xff0c;有…

人工智能:人机交互和用户体验:相关学点、两者关系、未来趋势

目录 相关学点 HCI 与 UX 的关系 当前趋势和未来展望 人机交互&#xff08;Human-Computer Interaction, HCI&#xff09;和用户体验&#xff08;User Experience, UX&#xff09;是现代设计和工程领域的重要概念&#xff0c;尤其在软件开发、网站设计和产品设计中起着关键作…

docker(wsl)命令 帮助文档

WSL wsl使用教程 wsl -l -v 列出所有已安装的 Linux 发行版 wsl -t Ubuntu-22.04 --shutdown 关闭所有正在运行的WSL发行版。如果你只想关闭特定的发行版 wsl -d Ubuntu-22.04 登录到Ubuntu环境 wsl --list --running 查看正在wsl中运行的linux发行版 wsl --unregister (系统名…

2024年09月机器人一级理论真题答案及解析

一、单选题 1、如图&#xff0c;下列哪个选项是机器人? &#xff08; &#xff09; A、a B、b C、c D、d 解析&#xff1a; 根据提供的图片和选项&#xff0c;选项B&#xff08;b&#xff09;与图片中显示的机器人外观相符&#xff0c;因此B是正确答案。 2、智能机器人属…

Web开发 -前端部分-CSS

CSS CSS&#xff08;Cascading Style Sheet&#xff09;:层叠样式表&#xff0c;用于控制页面的样式&#xff08;表现&#xff09;。 一 基础知识 1 标题格式 标题格式一&#xff1a; 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…

【数据集】车内视角拍摄道路路面缺陷数据集1075张3类标签YOLO+VOC格式

数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;1075 Annotations文件夹中xml文件总计&#xff1a;1075 labels文件夹中txt文件总计&#xff1a;1075 标签种类数&am…

vue3使用axios请求接口,先报错301,然后报错404

一、问题描述 在开发项目需求的时候&#xff0c;碰到一个奇怪的错误&#xff0c;先报错301&#xff0c;然后报错404&#xff0c;如上图所示。但是项目的其他接口请求都是正常的。 二、错误原因及解决方法 接口url的末尾缺少斜杠 /&#xff0c;加上就好了。 原url&#xff1a;…

当我用影刀AI Power做了一个旅游攻略小助手

在线体验地址&#xff1a;旅游攻略小助手https://power.yingdao.com/assistant/ca1dfe1c-9451-450e-a5f1-d270e938a3ad/share 运行效果图展示&#xff1a; 话不多说一起看下效果图&#xff1a; 智能体的截图&#xff1a; 工作流截图&#xff1a; 搭建逻辑&#xff1a; 其实这…

.NET 技术 | 调用系统API创建Windows服务

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

2024告别培训班 数通、安全、云计算、云服务、存储、软考等1000G资源分享

大类有&#xff1a;软考初级 软考中级 软考高级 华为认证 华三认证&#xff1a; 软考初级&#xff1a; 信息处理技术员 程序员 网络管理员 软考中级&#xff1a; 信息安全工程师 信息系统监理师 信息系统管理工程师 嵌入式系统设计时 数据库系统工程师 电子商务设…

Java设计模式 —— 【结构型模式】适配器模式(类的适配器、对象适配器、接口适配器)详解

文章目录 基本介绍一、类的适配器二、对象适配器三、接口适配器总结 基本介绍 生活中有很多例子&#xff1a; 不同国家的插座接口不同&#xff0c;需要转换器&#xff1b;家用电源220V&#xff0c;手机只接受5V充电&#xff0c;需要转换器&#xff1b;读卡器&#xff0c;拓展…