sklearn各聚类算法比较

无监督学习 | 层次聚类 之凝聚聚类原理及Sklearn实现 文章目录1. 层次聚类1.1 凝聚聚类1.2 层次图1.3 不同凝聚算法比较2. Sklearn 实现2.1 层次图可视化参考文献 1. 层次聚类 层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。[1] 因此其优点是可以层次化聚类,将聚类结构视觉化;而缺点是计... 阅读详情

1、各聚类算法的比较

在这里插入图片描述

from time import time
import numpy as np, matplotlib.pyplot as mp

from sklearn import cluster, datasets, mixture
from sklearn.neighbors import kneighbors_graph
from sklearn.preprocessing import StandardScaler  # 数据标准化
from itertools import cycle, islice

"""生成随机样本集"""
np.random.seed(0)  # 设定相同的随机环境,使每次生成的随机数相同

n_samples = 1500

noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5, noise=.05)
noisy_moons = datasets.make_moons(n_samples=n_samples, noise=.05)
blobs = datasets.make_blobs(n_samples=n_samples, random_state=8)
no_structure = np.random.rand(n_samples, 2), None

# 非均质分散的数据
random_state = 170
X, y = datasets.make_blobs(n_samples=n_samples, random_state=random_state)
transformation = [[0.6, -0.6], [-0.4, 0.8]]
X_aniso = np.dot(X, transformation)
aniso = (X_aniso, y)

# 方差各异的团
varied = datasets.make_blobs(n_samples=n_samples,
                             cluster_std=[1.0, 2.5, 0.5],
                             random_state=random_state)

"""设置聚类和绘图参数"""
mp.figure(figsize=(9 * 2 + 3, 12.5))
mp.subplots_adjust(left=.02, right=.98, bottom=.001, top=.96, wspace=.05, hspace=.01)
plot_num = 1

default_base = {'quantile': .3,  # 分位数
                'eps': .3,  # DBSCAN同类样本间最大距离
                'damping': .9,  # 近邻传播的阻尼因数
                'preference': -200,
                'n_neighbors': 10,
                'n_clusters': 3}

datasets = [
    (noisy_circles, {'damping': .77, 'preference': -240, 'quantile': .2, 'n_clusters': 2}),
    (noisy_moons, {'damping': .75, 'preference': -220, 'n_clusters': 2}),
    (varied, {'eps': .18, 'n_neighbors': 2}),
    (aniso, {'eps': .15, 'n_neighbors': 2}),
    (blobs, {}),
    (no_structure, {})]

for i_dataset, (dataset, algo_params) in enumerate(datasets):
    # 更新样本集特征对应的参数
    params = default_base.copy()
    params.update(algo_params)

    X, y = dataset

    # 数据标准化
    X = StandardScaler().fit_transform(X)

    # 估计均值漂移的带宽
    bandwidth = cluster.estimate_bandwidth(X, quantile=params['quantile'])

    # 层次聚类参数
    connectivity = kneighbors_graph(
        X, n_neighbors=params['n_neighbors'], include_self=False)  # 连接矩阵
    connectivity = 0.5 * (connectivity + connectivity.T)  # 使其对称化

    """创建各个聚类对象"""
    # 均值偏移
    ms = cluster.MeanShift(bandwidth=bandwidth, bin_seeding=True)
    # 小批Kmeans
    two_means = cluster.MiniBatchKMeans(n_clusters=params['n_clusters'])
    # 【ward linkage】层次聚类(离差平方和)
    ward = cluster.AgglomerativeClustering(
        n_clusters=params['n_clusters'], linkage='ward', connectivity=connectivity)
    # 谱聚类
    spectral = cluster.SpectralClustering(
        n_clusters=params['n_clusters'], eigen_solver='arpack', affinity="nearest_neighbors")
    # 基于密度
    dbscan = cluster.DBSCAN(eps=params['eps'])
    # 近邻传播
    affinity_propagation = cluster.AffinityPropagation(
        damping=params['damping'], preference=params['preference'])
    # 【average linkage】层次聚类(组间距离等于两组对象之间的平均距离)
    average_linkage = cluster.AgglomerativeClustering(
        linkage="average", affinity="cityblock",
        n_clusters=params['n_clusters'], connectivity=connectivity)
    # Balanced Iterative Reducing and Clustering Using Hierarchies
    birch = cluster.Birch(n_clusters=params['n_clusters'])
    # 高斯混合模型
    gmm = mixture.GaussianMixture(
        n_components=params['n_clusters'], covariance_type='full')

    clustering_algorithms = (
        ('MiniBatchKMeans', two_means),
        ('AffinityPropagation', affinity_propagation),
        ('MeanShift', ms),
        ('SpectralClustering', spectral),
        ('Ward', ward),
        ('AgglomerativeClustering', average_linkage),
        ('DBSCAN', dbscan),
        ('Birch', birch),
        ('GaussianMixture', gmm)
    )

    """绘图"""
    for name, algorithm in clustering_algorithms:
        t0 = time()
        algorithm.fit(X)
        t1 = time()

        if hasattr(algorithm, 'labels_'):
            y_pred = algorithm.labels_.astype(np.int)
        else:
            y_pred = algorithm.predict(X)

        mp.subplot(len(datasets), len(clustering_algorithms), plot_num)
        if i_dataset == 0:  # 第0行打印标题
            mp.title(name, size=10)
        colors = np.array(list(islice(cycle(['#377eb8', '#ff7f00', '#4daf4a',
                                             '#f781bf', '#a65628', '#984ea3',
                                             '#999999', '#e41a1c', '#dede00']),
                                      int(max(y_pred) + 1))))
        colors = np.append(colors, ["#000000"])  # 离群点(若有的话)设为黑色
        mp.scatter(X[:, 0], X[:, 1], s=10, color=colors[y_pred])

        mp.xlim(-2.5, 2.5)
        mp.ylim(-2.5, 2.5)
        mp.xticks(())
        mp.yticks(())
        mp.text(.99, .01, ('%.2fs' % (t1 - t0)).lstrip('0'),
                transform=mp.gca().transAxes, size=14, horizontalalignment='right')
        plot_num += 1
mp.show()

2、聚类评估

2.1、轮廓系数(Silhouette Coefficient)

这里写图片描述
a ( i ) a(i) a(i):样本 i i i到同簇其他样本的平均距离
b ( i ) b(i) b(i):样本 i i i的簇间不相似度

s ( i ) s(i) s(i)接近1:样本 i i i聚类合理
s ( i ) s(i) s(i)接近-1:样本 i i i更适合分到别的簇
s ( i ) s(i) s(i)接近0:样本 i i i在两个簇的边界上

from sklearn.metrics import silhouette_score

2.2、DBSCAN

  • Density-Based Spatial Clustering of Applications with Noise
优点:
1、不需要事先知道要形成的簇类的数量
2、可发现任意形状的簇类
3、可识别出 噪声点
缺点:
1、面对高维数据,距离参数难以调节
2、较耗计算资源
3、各簇密度差别较大时,聚类质量较差
from sklearn.cluster import DBSCAN
from sklearn import metrics  # 聚类评估
import numpy as np, matplotlib.pyplot as mp
# 创建数据
X = np.array([[1, 4], [6, 8], [1, 2], [6, 7], [5, 3], [5, 8], [2, 3], [8, 7], [2, 2], [4, 2], [8, 6], [7, 8], [5, 1]])
radii = [1.414, 1.415, 2]
for i in range(3):
    # DBSCAN:基于密度的聚类方法
    labels = DBSCAN(eps=radii[i], min_samples=2).fit(X).labels_
    # 可视化
    mp.subplot(1, 3, i + 1)
    colors = ['red', 'blue', 'green', 'purple', 'orange', 'black']
    for x, l in zip(X, labels):
        mp.scatter(x[0], x[1], c=colors[l])
    # 轮廓系数(Silhouette Coefficient)
    score = metrics.silhouette_score(X, labels)
    print('eps = %.3f 的聚类得分是:' % radii[i], score)
mp.tight_layout()
mp.show()

这里写图片描述

打印结果
eps = 1.414 的聚类得分是: 0.36739772676132704
eps = 1.415 的聚类得分是: 0.6018738849706604
eps = 2.000 的聚类得分是: 0.6431136276704154

2.3、MeanShift

  • 寻找核密度极值点并作为簇的质心,然后根据最近邻原则为样本点赋予质心
    这里写图片描述
# 创建数据 -------------------------------------------------------------------------------------------------------------
from sklearn.datasets.samples_generator import make_blobs
centers = [[0, 0, 0], [6, 4, 1], [9, 9, 9]]
X, _ = make_blobs(n_samples=100, centers=centers, cluster_std=2, random_state=0)
# 均值偏移 -------------------------------------------------------------------------------------------------------------
from sklearn.cluster import MeanShift, estimate_bandwidth
bandwidth = estimate_bandwidth(X, quantile=0.2, n_samples=50)  # 带宽(分位点、样本数)
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True).fit(X)
# 聚类标签
labels = ms.labels_
# 簇的中心
centers = ms.cluster_centers_
print(centers)
# 聚类评估 ---------------------------------------------------------------------------------------------------------
from sklearn import metrics
score = metrics.silhouette_score(X, labels)
print('聚类得分是:%.2f' % score)
# 可视化 -----------------------------------------------------------------------------------------------------------
import matplotlib.pyplot as mp
from mpl_toolkits import mplot3d
fig = mp.figure()
ax = mplot3d.Axes3D(fig)
colors = ['red', 'blue', 'green', 'purple', 'orange', 'cyan', 'gray', 'brown', 'yellow', 'pink', 'black']
# 样本集聚类结果
for x, l in zip(X, labels):
    ax.scatter(x[0], x[1], x[2], c=colors[l], s=120, alpha=0.2)
# 簇的中心
for i in range(len(centers)):
    ax.scatter(centers[i][0], centers[i][1], centers[i][2], c=colors[i], s=200, marker='x')
mp.show()

这里写图片描述

2.4、GMM

高斯混合模型
将事物分解为若干的基于高斯概率密度函数形成的模型
import numpy as np, matplotlib.pyplot as mp
from sklearn.cluster import KMeans  # K-means
from sklearn.mixture import GaussianMixture  # 高斯混合模型
from sklearn.datasets import make_blobs
np.random.seed(8)  # 设定随机环境

# 创建随机样本
X, _ = make_blobs(centers=[[0, 0]])
X1 = np.dot(X, [[4, 1], [1, 1]])
X2 = np.dot(X[:50], [[1, 1], [1, -5]]) - 2
X = np.concatenate((X1, X2))
y = [0] * 100 + [1] * 50

# KMeans
kmeans = KMeans(n_clusters=2)
y_kmeans = kmeans.fit(X).predict(X)
# GMM
gmm = GaussianMixture(n_components=2)
y_gmm = gmm.fit(X).predict(X)

# 绘图
for e, labels in enumerate([y, y_kmeans, y_gmm], 1):
    mp.subplot(1, 3, e)
    mp.scatter(X[:, 0], X[:, 1], c=labels, s=40, alpha=0.6)
    mp.xticks(())
    mp.yticks(())
mp.show()

在这里插入图片描述

3、附录

EnCn
clustern. 簇;v 群聚
radius半径(复数:radii)
cyan蓝绿色
density密度
spatial空间的
distance距离
silhouette轮廓
coefficient系数;合作的
shiftn. 移动;vi. 转换;vt. 转移
bandwidth带宽
quantilen. [计] 分位数;分位点
hierarchy层级
SFM(structure from motion 从运动恢复结构)和MVS(multi-view stereo 多视图立体视觉) 主要目的:SFM是重建稀疏点云的,MVS重建的是稠密点云。 输入的数据:SFM是没有标定的数据,而MVS输入的是标定的数据。 为什么SFM无法重建出稠密的点云,但是MVS可以? SFM中我们用来做重建的点是由特征匹配提供的!这些匹配点天生不密集!MVS则几乎对照片中的每个像素点都进行匹配,几乎重建每一个像素点的三维坐标,这样得到的点的密集程度可以较接近图像为我们展示出的清晰度。 SFM和MVS关系 SFM给MVS算好了输入视角的位姿,内参,稀疏点云以及它们的共视关系,MVS再利用这些信息以及彩色图 阅读详情

相关推荐

python实现语音信号的分帧、加窗、预处理

语音信号实现分帧、加窗、预处理音频文件读取预加重分帧加窗 音频文件读取 librosa是非常强大的python语音信号处理库。 读取音频: 使用语句librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)读取音频文件,默认的采样率是22050,若要保留音频的原始采样率,使用sr=None。 其中: path:表示音频文件的路径 sr:表示采样率 mono:bool,是布尔类型,表示是否将信号转换为单声道 offset:float,后

weixin_45272908的博客 1万+

使用sklearn对比各种机器学习方法:SVM,XGBoost...

sklearn常用机器学习算法总结(附python代码) - 简书 (jianshu.com)https://www.jianshu.com/p/641707e4e72c 注意:在使用XGBoost算法的时候,需要将X_train,y_train等Tensor类型变量数据类型置为nd array类型,而其他算法可以直接使用Tensor数据类型,即: features = features.numpy() labels = labels.numpy() idx_train = idx_train.nu.

yimenren的博客 2930

Unity中URP实现水体效果(泡沫)

在上篇文章中,我们实现了水体的深度。在这篇文章中,我们来使用上篇文章采样后的深度图来实现水中的泡沫效果。

楠溪泽岸的博客 3491

机器学习-sklearn-聚类(clustering),比较不同聚类算法(Comparing differentclustering algorithms on toy datasets)

首先解释下这个结果:从左往右,分类算法依次是:Single Linkage(单链接法),Average Linkage(平均链接法),Complete Linkage(完全链接法),Ward Linkage(沃德链接法),从上往下数据类型依次是:环形数据,月亮形数据,方差不同的聚类数据,异方差分布的数据,高斯分布的数据,均匀分布的数据。例如,在使用KMeans聚类算法时,如果数据集中包含异常值、数据规模较大或者数据分布不均匀等情况,可能会导致算法出现警告或错误,并产生异常行为或不合理的结果。

Zljhaodai的博客 617

Android各个版本存储权限适配

虽然 Android10 上面提出了外部存储分区的概念,不过之前的版本中,我们只要为应用添加了。1、AndroidManifest添加权限设置。3、拒绝权限时跳转详细设置页面。就可以像之前的方式一样访问手机的外部存储空间。2、请求所有文件管理权限。

sig321的专栏 1848

电池充电管理芯片规格书精读指南:从参数解析到设计实战

电池充电管理是嵌入式系统和便携式设备开发中的基础环节,其核心在于理解并应用充电芯片的规格参数。充电芯片通过精确控制电压、电流、温度等关键参数,实现对锂电池等可充电电池的安全、高效管理。掌握这些参数原理,对于优化产品功耗、提升充电效率、保障电池寿命具有重要技术价值,广泛应用于智能穿戴、消费电子、无人机等场景。本文聚焦于**充电电流**设定与**热管理**等核心参数,深入解析其相互影响与工程选型中的权衡,旨在帮助开发者将抽象的规格书数据转化为可靠的电路设计依据,从而有效排查充电故障,提升产品整体可靠性。

weixin_26874745的博客 669

Python机器学习库sklearn几种回归算法建模及分析(实验)

最简单的回归模型就是线性回归 数据导入与可视化分析 from IPython.display import Image %matplotlib inline # Added version check for recent scikit-learn 0.18 checks from distutils.version import LooseVersion as Version f

公众号:瑞行AI 5万+

机器学习——Anaconda下载安装教程

Anaconda详细下载安装教程

2401_83693485的博客 3070

【Python】sklearn机器学习之Meanshift聚类算法

凡聚类者,必有中心。按照这个思路,如果某个区域满足聚类的要求,那么其自然中心与样本均值应该是几乎重合的,这也是MeanShift算法的基本逻辑。

微小冷的学习笔记 2280

无人机基本组成部件

无人机基本组成部件

qq_37410522的博客 1万+

PNETLab 镜像包官方下载太慢?不急,最新版本PNET_4.2.10分享!

你好,这里是网络技术联盟站,我是瑞哥。PNETLab是一个强大的网络仿真工具平台,全称Packet Network Emulator Tool Lab。它不仅允许用户进行深入的网络实验,还支持社区成员之间的实验室共享。PNETLab致力于为学习者、教师以及网络工程师提供一个全面的实验环境,以便于他们能够在实际部署前测试和验证网络配置和协议。和。这两个部分相辅相成,共同构成了一个全面且灵活的网络仿真生态系统。

网络技术联盟站 4484

Sklearn聚类算法之meanshift

以二维来说明可能更容易理解,下图中的很多的红点就是我们的样本特征点,meanshift就是在这些点中的任意一个点为圆心,然后以半径R画一个圆(在opencv中是一个矩形),然后落在这个圆中的所有点和圆心都会对应的一个向量,把所有这些向量相加(注意是向量相加),最终我们只得到一个向量,就是下图中用黄色箭头表示的向量,这个向量就是meanshift向量。 然后再以这个meanshift向量的终点...

代码小菜鸟的博客 6800

备战2025数学建模国赛(算法46):多目标优化

本篇博客将深入浅出地介绍多目标优化的核心概念、主流算法,并重点结合一个数学建模竞赛的经典案例,提供完整的Python代码实现,助你在未来的竞赛中游刃有余。它通过寻找帕累托最优解集,完美地诠释了“鱼与熊掌不可兼得”的权衡思想,为最终决策提供科学依据。这些问题都包含多个相互冲突的目标,传统的单目标优化方法(如梯度下降、单纯形法)对此无能为力,因为它们无法同时优化多个目标。在数学建模竞赛中,我们面临的绝大多数问题都不是单一的“最好”,而是充满权衡与妥协的“最优”。记住,成功的建模不仅在于解出问题,更在于清晰地。

YOLO 286

python 密度聚类 使用_使用python+sklearn实现在小型数据集(toy datasets)上比较不同聚类算法...

注意:单击此处https://urlify.cn/Rzme22下载完整的示例代码,或通过Binder在浏览器中运行此示例此示例显示了在二维模式下的数据集上不同聚类算法的特征。除最后一个数据集外,每个数据集-算法对的参数均已调整好,以产生比较好的聚类结果。有一些算法比其他算法对参数值更敏感。最后一个数据集是聚类为“null”的一个示例:数据是同质(homogeneous)的,并且没有好的聚...

weixin_39609620的博客 592

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

k-means算法的matlab代码实现_使用python+sklearn实现KMeans和MiniBatchKMeans聚类算法的比较...

注意:单击此处https://urlify.cn/FvEBvu下载完整的示例代码,或通过Binder在浏览器中运行此示例本文我们想要比较MiniBatchKMeans和KMeans的性能,MiniBatchKMeans应该会更快,但给出的结果略有不同(请参见 Mini Batch K-Means)。我们分别使用KMeans和MiniBatchKMeans对一组数据进行聚类,然后绘制结果。...

weixin_39698007的博客 357

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python聚类分析sklearn_k-means聚类算法的python实现和sklearn的聚类器

k-means聚类算法的python实现和sklearn的聚类器文章目录k-means聚类算法的python实现和sklearn的聚类器1. 标准k-means聚类算法2. sklearn.cluster.KMeans1. 标准k-means聚类算法k-means是一个迭代算法,需要人为指定聚类数量。因为实现简单、对大样本有很好的拓展性被广泛采用。 算法初始化阶段首先随机选取不重复的kkk个点作为...

weixin_36329414的博客 1098

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

初识sklearn 认识python的强悍 以及一些简单的聚类算法

什么是sklearn? sklearn是一个Python的科学计算库,提供了数种聚类算法可供选择 numpy、scipy是Python的科学运算库,matplotlib是图形库,用于绘图   sklearn Home主页 中文文档地址:sklearn.lzjqsdd.com  翻译还在进行中 1.       Classification  分类 2.       Regressio

yaoyaoyao2的博客 5350

2、k-means聚类算法sklearn与手动实现

本文将对k-means聚类算法原理和实现过程进行简述。

兴趣使然的创作者 683

python实现kmeans聚类

目录 一、先上手撸代码! 1、导库、导数据 2、核心算法 3、可视化部分 二、调库代码!(sklearn) 一、先上手撸代码! 1、首先是导入所需要的库和数据 import pandas as pd import numpy as np import random import math import matplotlib.pyplot as plt # 这两行代码解决 plt 中文显示的问题 plt.rcParams['font.sans-serif'] = ['SimHei'].

weixin_46657323的博客 2万+

sklearn之kmeans

Kmeans工作原理 sklearn.cluster.KMeans 1.参数n_clusters n_clusters是KMeans中的k,表示着我们告诉模型我们要分几类。这是KMeans当中唯一一个必填的参数,默认为8类,当我们拿到一个数据集,如果可能的话,我们希望能够通过绘图先观察一下这个数据集的数据分布,以此来为我们聚类时输入的n_clusters做一个参考。 2.参数init &...

weixin_45580742的博客 1713

机器学习 | 聚类算法(K-means)

本文章主要讲解了机器学习中的聚类分析(K-means)的基本原理和概念,以及评估指标等。

weixin_63292027的博客 1855

sklearn聚类评价指标

sklearn中的指标都在sklearn.metric包下,与聚类相关的指标都在sklearn.metric.cluster包下,聚类相关的指标分为两类:有监督指标和无监督指标,这两类指标分别在sklearn.metric.cluster.supervised和sklearn.metric.cluster.unsupervised包下。聚类指标大部分都是有监督指标,无监督指标较少。 无监...

3844

数据挖掘(七) DBSCAN聚类算法

DBSCAN是一种非常著名的基于密度的聚类算法。其英文全称是 Density-Based Spatial Clustering of Applications with Noise,意即:一种基于密度,对噪声鲁棒的空间聚类算法。直观效果上看,DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇。DBSCAN算法具有以下特点:基于密度,对远离密度核心的噪声点鲁棒无需知道聚类簇的数量可以发现任意形状的聚类簇DBSCAN通常适合于对较低维度数据进行聚类分析。

May the Force be with you 4468

Kmeans与DBSCAN聚类结果演示

import pandas as pd # 读取数据 data = pd.read_excel('./演示数据.xlsx') data.head() # 绘制图形 import matplotlib.pyplot as plt plt.scatter(data.iloc[:, 0], data.iloc[:, 1], c='green', marker='^') plt.xlabel('x') plt.ylabel('y') plt.show() # 使用DBSCAN算法进行聚类 from sk

qq_27481087的博客 768

跟我学算法聚类(kmeans)

kmeans是一种无监督的聚类问题,在使用前一般要进行数据标准化, 一般都是使用欧式距离来进行区分,主要是通过迭代质心的位置 来进行分类,直到数据点不发生类别变化就停止, 一次分类别,一次变换质心,就这样不断的迭代下去 优势:使用方便劣势:1.K值难确定 2. 复杂度与样本数量呈线性关系 3.很难发现形状任意的簇 4...

weixin_34161032的博客 287

sklearn 笔记:聚类

1 sklearn各方法比较

qq_40206371的博客 664
上一篇: Python写日志【自用】
下一篇: Python【Windows】进程池
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值