【随机种子】Random Seed是什么?

Random Seed是什么?

 随机种子(Random Seed)就是这些随机数的初始值。

一般计算机里面产生的随机数都是伪随机数。 伪随机数,也是就一个一直不变的数。

import numpy as np

# 不设置seed:每次运行结果都不同
random_numbers1 = np.random.rand(3)
print("不设置seed:", random_numbers1)

# 设置seed:结果可重现
np.random.seed(42)
random_numbers2 = np.random.rand(3)
print("seed=42:", random_numbers2)  # 每次运行都一样

# 再次使用相同的seed
np.random.seed(42)
random_numbers3 = np.random.rand(3)
print("再次seed=42:", random_numbers3)  # 与random_numbers2完全相同
  • 为什么要用Random Seed?
  • 可重现性:确保实验结果可以复现
  • 调试方便:固定随机结果便于找bug
  • 公平比较:不同算法使用相同的随机初始化
  • 怎么用?常见应用场景:
  • 可重复性:

    • 在调试代码时,可以重现相同的结果
    • 在比较不同算法时,使用相同的随机初始化条件
  • 实验控制:

    • 在进行实验对比时,保证初始条件相同
    • 在论文研究中,使其他研究者能重现结果
  • 不同场景的应用:

    • 模型训练:确保每次训练初始化相同
    • 数据划分:确保训练集/测试集划分一致
    • 随机采样:保证采样结果可重现
import numpy as np

# 1. 首先生成原始数据
X = np.random.rand(100, 2)  # 创建100个随机的二维点
# 比如生成的数据可能是:
# [[0.1, 0.2],
#  [0.3, 0.4],
#  [0.5, 0.6],
#  ...共100个点...]

# 2. 从这100个点中随机选择3个点作为初始中心
def kmeans_init(X, k):
    np.random.seed(42)  # 设置随机种子
    n_samples = X.shape[0]  # = 100
    
    # random_indices会随机生成3个不同的索引,比如[5, 23, 67]
    random_indices = np.random.choice(n_samples, k, replace=False)
    
    # 根据这些索引从X中选择对应的点
    # 如果random_indices是[5, 23, 67],那么就选择X中第5、23、67号点作为初始中心
    initial_centers = X[random_indices]
    return initial_centers

k = 3
centers = kmeans_init(X, k)

让我们用一个更简单的例子来说明:

import numpy as np

# 生成10个二维点作为示例
np.random.seed(1)  # 为了演示固定结果
X = np.random.rand(10, 2)
print("原始数据点:")
print(X)
# 输出10个二维点,比如:
# [[0.417, 0.720],
#  [0.000, 0.302],
#  [0.146, 0.092],
#  [0.785, 0.597],
#  [0.934, 0.244],
#  [0.390, 0.527],
#  [0.671, 0.444],
#  [0.883, 0.865],
#  [0.641, 0.175],
#  [0.138, 0.384]]

# 从这10个点中随机选择3个作为中心点
def kmeans_init(X, k):
    np.random.seed(42)  # 固定随机种子
    n_samples = 10  # 总共10个点
    
    # 随机选择3个不同的索引(比如选择了 2,7,4)
    random_indices = np.random.choice(n_samples, k, replace=False)
    print("选择的索引:", random_indices)
    
    # 返回这些索引对应的点作为初始中心
    initial_centers = X[random_indices]
    print("选择的中心点:")
    print(initial_centers)
    return initial_centers

k = 3
centers = kmeans_init(X, k)

关键理解:

  1. np.random.rand(100, 2)生成了原始数据点(100个点,每个点有x,y两个坐标)
  2. random_seed控制的是从这100个点中选择3个点的随机过程
    • 不是生成新的点
    • 而是从现有的点中随机选择
  3. 这些选择的点将作为K-means聚类的初始中心点

就像:

  1. 你先在纸上随机画了100个点
  2. 然后需要从这100个点中随机选择3个点作为起始中心
  3. random_seed就是控制"选择"这个过程
    • 相同的seed每次都会选择相同的点
    • 不同的seed会选择不同的点
    • 不设置seed每次运行都会选择不同的点

所以seed不是控制X坐标点的生成,而是控制从已有的X中选择哪些点作为初始中心点。这些初始中心点会影响K-means算法最终的聚类结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值