dbscan聚类算法过程

合集下载

dbscan聚类方法

dbscan聚类方法

dbscan聚类方法【原创版3篇】目录(篇1)1.DBSCAN 聚类方法的概述2.DBSCAN 聚类方法的基本原理3.DBSCAN 聚类方法的算法流程4.DBSCAN 聚类方法的应用案例5.DBSCAN 聚类方法的优缺点正文(篇1)1.DBSCAN 聚类方法的概述DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类方法,该方法由 Rosenfeld 和 Eidelman 于 1995 年提出。

它主要通过计算数据点之间的密度来确定聚类,可以发现任意形状的聚类结构,并且对噪声数据具有较强的鲁棒性。

2.DBSCAN 聚类方法的基本原理DBSCAN 方法的基本原理是基于数据点的密度分布。

该方法将数据空间中的点分为核心点、边界点和噪声点三类。

其中,核心点是指其邻域内的点数量大于等于指定阈值的点;边界点是指其邻域内的点数量小于阈值且邻域内的点又与其他核心点相邻的点;噪声点是指其邻域内的点数量小于阈值且邻域内的点不与其他核心点相邻的点。

通过将核心点之间的连接关系形成聚类,可以得到最终的聚类结果。

3.DBSCAN 聚类方法的算法流程DBSCAN 聚类方法的算法流程主要包括两个步骤:(1)确定核心点:遍历数据集中的每一个点,计算其邻域内的点数量,将数量大于等于阈值的点标记为核心点。

(2)形成聚类:对于核心点,将其邻域内的点也标记为为核心点,并将这些核心点之间的连接关系形成聚类。

4.DBSCAN 聚类方法的应用案例DBSCAN 聚类方法在许多领域都有广泛应用,例如数据挖掘、生物信息学、图像处理等。

以图像处理为例,通过对图像像素进行密度划分,可以识别出图像中的目标物体,从而实现目标检测和识别。

5.DBSCAN 聚类方法的优缺点优点:(1)可以发现任意形状的聚类结构;(2)对噪声数据具有较强的鲁棒性;(3)算法具有较强的可扩展性,可以处理大规模数据集。

sklearn之基于DBSCAN的聚类算法

sklearn之基于DBSCAN的聚类算法

sklearn之基于DBSCAN的聚类算法'''DBSCAN算法:从样本空间中任意选择⼀个样本,以事先给定的半径做圆,凡被该圆圈中的样本都视为与该样本处于相同的聚类,以这些被圈中的样本为圆⼼继续做圆,重复以上过程,不断扩⼤被圈中样本的规模,直到再也没有新的样本加⼊为⽌,⾄此即得到⼀个聚类。

于剩余样本中,重复以上过程,直到耗尽样本空间中的所有样本为⽌。

DBSCAN算法的特点:1.事先给定的半径会影响最后的聚类效果,可以借助轮廓系数选择较优的⽅案。

2.根据聚类的形成过程,把样本细分为以下三类:外周样本:被其它样本聚集到某个聚类中,但⽆法再引⼊新样本的样本。

孤⽴样本:聚类中的样本数低于所设定的下限,则不称其为聚类,反之称其为孤⽴样本。

核⼼样本:除了外周样本和孤⽴样本以外的样本。

'''import numpy as npimport matplotlib.pyplot as mpimport sklearn.cluster as scimport sklearn.metrics as sm# 读取数据,绘制图像x = np.loadtxt('./ml_data/multiple3.txt', unpack=False, dtype='f8', delimiter=',')print(x.shape)# 选择最优半径epsilons = np.linspace(0.3, 1.0, 8)models, scores = [], []for epsilon in epsilons:# 针对每个半径构建DBSCAN模型model = sc.DBSCAN(eps=epsilon, min_samples=5)model.fit(x)score = sm.silhouette_score(x, bels_, sample_size=len(x), metric='euclidean')models.append(model)scores.append(score)index = np.array(scores).argmax()best_model = models[index]best_eps = epsilons[index]best_score = scores[index]print(best_eps, best_model, best_score)# DBSAN算法的副产品获取核⼼样本的下标core_indices = best_model.core_sample_indices_core_mask = np.zeros(len(x), dtype='bool')core_mask[core_indices] = Trueprint(core_mask)# 获取孤⽴样本的掩码offset_mask = best_bels_ == -1print(offset_mask)# 获取外周样本的掩码p_mask = ~(core_mask | offset_mask)print(p_mask)# 分别输出核⼼点坐标、孤⽴点坐标和外周点坐标print('核⼼点坐标:', x[core_mask], sep='\n')print('孤⽴点坐标:', x[offset_mask], sep='\n')print('外周点坐标:', x[p_mask], sep='\n')# 画图显⽰样本数据mp.figure('DBSCAN', facecolor='lightgray')mp.title('DBSCAN', fontsize=16)mp.xlabel('X', fontsize=14)mp.ylabel('Y', fontsize=14)mp.tick_params(labelsize=10)mp.scatter(x[core_mask][:, 0], x[core_mask][:, 1], s=80, c=best_bels_[core_mask], label='core')mp.scatter(x[offset_mask][:, 0], x[offset_mask][:, 1], s=80, c=best_bels_[offset_mask], label='offset')mp.scatter(x[p_mask][:, 0], x[p_mask][:, 1], s=80, c=best_bels_[p_mask], label='p')mp.legend()mp.show()输出结果:(200, 2)0.7999999999999999 DBSCAN(algorithm='auto', eps=0.7999999999999999, leaf_size=30,metric='euclidean', metric_params=None, min_samples=5, n_jobs=None,p=None) 0.41779833446624154[False True True True True True True True True True False TrueTrue True True True True True True False True True True TrueTrue True False True True True True True True True True TrueTrue True True True True True True True True True False TrueTrue True True True True True True True False True True TrueTrue True True True True True True True False True True TrueTrue True True False True True False True True True False False True True True True False True True True True True True FalseTrue False True True False True True True False True True True True True False False True True True True False True True False True True True True True True True True True True True TrueTrue True True True True True True True True True True TrueTrue True False True True True True True][False False False False False False False False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False True False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False][ True False False False False False False False False False True False False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False True False False False False False False False False False True False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False False False False False False False False False False True False False False False False False False False False False True False False False False False False False False True False False False False False False True False False True False False False True True False False False False False False False False False False False True False True False False False False False False True False False False False False True True False False False False False False False True False False False False False False False False False False False False False False False False False False False False False False False False False False True False False False False False]核⼼点坐标:[[2.84 3.16][4.74 1.84][6.36 4.89][1.77 1.55][4.29 6.74][5.78 0.95][8.36 5.2 ][1.76 2.9 ][3.2 4.98][6.02 6.12][2.91 1.74][3.81 6.2 ][5.67 2.19][6.93 5.8 ][1.84 1.36][3.5 5.6 ][5.77 1.54][2.1 1.68][3.98 4.85][5.64 3.35][7.59 6.79][1.92 3.93][3.93 5.7 ][7.24 6.23][1.36 1.47][1.78 5.39][5.93 1.19][7.34 5.58][1.86 1.99][3.2 5.19][5.62 2.45][6.31 5.37][1.49 1.8 ][2.13 5.29][5.57 2.77][6.77 5.8 ][1.79 2.13][5.21 3.07][6.54 4.05] [1.59 1.04] [1.65 5.41] [6.53 1.76] [6.77 5.59] [2.21 4.57] [5.58 1.88] [7.61 4.95][1.8 1.25][2.77 5.71] [5.13 2.4 ] [7.14 5.6 ][1.83 1.26][2.78 5.67][5.76 2.64][6.71 6.01][2.64 1.86][3.21 5.09] [7.23 1.22] [6.47 5.5 ] [2.46 2.51] [1.92 3.94] [5.64 2.76] [7.16 6.08] [3.52 4.25] [5.41 3.55] [7.9 5.22] [1.99 2.64] [3.46 4.66] [6.56 2.25] [6.89 4.43] [1.4 1.08] [3.43 6.08] [6.64 2.19] [6.26 5.91][2.15 3.11][3.18 5.41][6.73 3.67][7.36 5.97] [1.55 2.96] [3.99 5.63] [6.68 3.51] [6.34 5.99] [3.91 4.54] [6.21 3.2 ] [6.25 5.33][2.13 1.91][3.75 6.23][4.35 1.49] [7.14 5.64] [1.68 2.67] [3.85 4.84] [6.04 2.68] [1.55 2.26] [1.86 5.29][6.06 2.12][7.77 5.17] [1.35 2.16] [3.53 6.11] [6.8 0.61] [6.92 6.02] [3.07 5.09][6.44 2.07][7.15 6.15][1.01 2.56][2.45 6.24] [6.86 2.54] [2.73 1.7 ] [2.25 5.62] [7.56 5.93] [3.01 1.68] [2.74 4.45] [1.99 0.39][4.05 6.16][5.34 2.66][6.47 0.7 ][7.04 4.83] [2.8 3.42] [7.14 1.72] [6.9 6.86] [4.55 5.17][6.29 1.99][7.41 4.88][2.83 2.29][3.24 5.83][1.51 2.95][2.55 5.51][6.5 1.72][7.97 4.62] [2.82 4.83] [5.02 3.53] [1.57 2.67] [1.72 4.05][6.44 3.28][7.41 6.85] [1.67 1.5 ] [1.77 5.59] [5.4 2.64] [7.18 5.94] [1.45 1.47] [3.77 5.01] [6.31 0.48] [6.65 5.65][1.37 2.51][2.54 4.42][6.17 1.8 ][7.29 4.68][2.44 1.57][3.46 4.5 ][5.58 2.19][6.46 6.23][2.17 2.4 ][3.29 5.66] [6.99 1.71] [6.54 4.71] [0.99 2.14] [3.67 4.47] [6.64 6.66][2.15 0.75][3.26 6.08] [5.72 1.98] [7.26 5.35]]孤⽴点坐标:[[ 5.66 -0.33] [ 0.16 1.55] [-0.27 2.22] [-0.39 2.28]]外周点坐标:[[ 1.96 -0.09] [ 5.56 0.34] [ 8.68 4.33] [ 7.54 0.52] [ 0.42 2.75] [ 3.29 1.26] [ 3.96 1.83] [ 5.26 5.89] [ 1.11 3.74] [ 8.17 6.19] [ 7.93 1.84] [ 4.53 3.2 ] [ 8.95 5.7 ] [ 8.26 6.04] [ 3.46 3.57] [ 2.6 0.77] [ 4.26 1.67] [ 4.78 7.25] [ 7.77 7.38] [ 4.98 1.02]] 。

dbscan算法实验报告

dbscan算法实验报告

DBSCAN算法实验报告1. 引言1.1 研究背景DBSCAN算法是一种基于密度的聚类算法,它能够有效地识别数据集中的高密度区域,并将其与低密度区域分隔开来。

在数据挖掘和机器学习领域,聚类算法是一项重要的研究课题,因为它可以帮助我们发现数据中的隐藏模式和结构。

然而,传统的聚类算法在处理具有不规则形状和噪声的数据时存在一定的局限性。

因此,DBSCAN算法的提出填补了这一空白,并成为了一种被广泛应用的聚类算法。

DBSCAN算法的研究背景主要包括以下几个方面。

首先,传统的聚类算法如K-means和层次聚类算法在处理大规模数据集时效率较低,而DBSCAN算法通过基于密度的聚类方式,能够在较短的时间内处理大规模数据集。

其次,DBSCAN算法对数据的分布形状没有要求,能够处理具有不规则形状的数据集,这在现实世界的数据分析中具有重要意义。

此外,DBSCAN算法还能够有效地处理噪声数据,提高了聚类的准确性和稳定性。

在本文中,我们将对DBSCAN算法进行详细的实验研究。

通过对不同数据集的聚类实验,我们将评估DBSCAN算法在不同情况下的性能表现,并与其他常用的聚类算法进行比较。

同时,我们还将探讨DBSCAN算法的优缺点,并提出一些改进策略,以进一步提高其聚类效果。

通过本实验报告的撰写,我们希望能够深入理解DBSCAN算法的原理和应用,并为进一步的研究和实践提供参考。

1.2 研究目的1.2.1 理解DBSCAN算法的基本原理和核心概念在本节中,我们将介绍DBSCAN算法的基本原理和核心概念,包括密度可达性、核心对象、直接密度可达等概念的定义和解释。

通过深入理解这些概念,我们可以更好地理解DBSCAN算法的工作机制。

1.2.2 掌握DBSCAN算法的算法流程和步骤在本节中,我们将详细介绍DBSCAN算法的算法流程和步骤。

包括如何选择合适的参数、如何计算数据点的密度、如何确定核心对象等。

通过掌握算法的具体步骤,我们可以更好地理解和应用DBSCAN算法。

dbscan聚类算法流程

dbscan聚类算法流程

dbscan聚类算法流程
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法。

相比于K-means等传统聚类算法,在处理噪声点和非球形数据方面具有更好的效果。

DBSCAN算法流程如下:
Step 1:初始化
1.1 读入数据:读入n个数据对象,每个数据对象包含d个维度的特征值
1.2 初始化参数:给定半径Eps和密度阈值MinPts
Step 2:计算核心点
2.1 计算距离:对于每个数据对象,计算它与其他数据对象之间的欧式距离
2.2 计算密度:根据半径Eps,得出以该数据对象为中心的圆内包含的数据对象个数N
2.3 标记核心点:如果N≥MinPts,则该数据对象为核心点
Step 3:构建聚类簇
3.1 构建聚类簇:对于每个核心点,将以其为中心的圆内的所有数据对象划分为一个簇
3.2 标记非核心点:对于所有不是核心点的数据对象,如果它位于一个核心点的半径Eps内,则将其标记为边界点;否则将其标记为噪声点
3.3 合并簇:对于所有相互之间存在至少一个共同的核心点的簇,将它们合并为一个簇
4.1 输出聚类簇:将所有聚类簇输出
需要注意的是,DBSCAN算法的输入参数Eps和MinPts对聚类结果产生重要影响。

如果Eps过大,会导致所有数据对象都被划分到同一个簇中;如果Eps过小,则会将相近但本应属于不同簇的数据对象划分到不同簇中。

MinPts参数过大会导致过度聚类,而过小则会将随机噪声点误划分为簇。

因此,对于给定的数据集,需要对参数进行适当调整,以得到最优的聚类结果。

【机器学习】DBSCAN密度聚类算法原理与实现

【机器学习】DBSCAN密度聚类算法原理与实现

【机器学习】DBSCAN密度聚类算法原理与实现1、概述DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类⽅法)是⼀种很典型的密度聚类算法.和K-Means,BIRCH这些⼀般只适⽤于凸样本集的聚类相⽐,DBSCAN既可以适⽤于凸样本集,也可以适⽤于⾮凸样本集。

DBSCAN算法的显著优点是聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类。

该算法利⽤基于密度的聚类的概念,即要求聚类空间中的⼀定区域内所包含对象(点或其他空间对象)的数⽬不⼩于某⼀给定阈值。

过滤低密度区域,发现稠密度样本点。

同⼀类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处⼀定有同类别的样本存在。

2、基本定义假设我的样本集是D=(x1,x2,...,xm),则DBSCAN具体的密度描述定义如下:以下我们⽤图形直观的理解⼀下。

图中MinPts=5,红⾊的点都是核⼼对象,因为其ϵ-邻域⾄少有5个样本。

⿊⾊的样本是⾮核⼼对象。

所有核⼼对象密度直达的样本在以红⾊核⼼对象为中⼼的超球体内,如果不在超球体内,则不能密度直达。

图中⽤绿⾊箭头连起来的核⼼对象组成了密度可达的样本序列。

在这些密度可达的样本序列的ϵ-邻域内所有的样本相互都是密度相连的。

3、DBSCAN密度聚类思想DBSCAN的聚类定义:由密度可达关系导出的最⼤密度相连的样本集合,即为我们最终聚类的⼀个类别,或者说⼀个簇。

那么怎么才能找到这样的簇样本集合呢?DBSCAN使⽤的⽅法很简单,它任意选择⼀个没有类别的核⼼对象作为种⼦,然后找到所有这个核⼼对象能够密度可达的样本集合,即为⼀个聚类簇。

接着继续选择另⼀个没有类别的核⼼对象去寻找密度可达的样本集合,这样就得到另⼀个聚类簇。

⼀直运⾏到所有核⼼对象都有类别为⽌。

但是我们还是有三个问题没有考虑。

第⼀个是⼀些异常样本点或者说少量游离于簇外的样本点,这些点不在任何⼀个核⼼对象在周围,在DBSCAN中,我们⼀般将这些样本点标记为噪⾳点。

dbscan的dbi指标 -回复

dbscan的dbi指标 -回复

dbscan的dbi指标-回复DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,旨在发现具有相似密度的密度相连区域。

为了评估DBSCAN聚类结果的质量,需要使用一些评估指标,其中之一是DBI(Davies-Bouldin Index)。

DBI是一种聚类间距离度量,用于衡量不同聚类的相似性和分离度。

它通过计算聚类间的平均距离与聚类内部的最大距离之比来评估聚类的紧密程度和分离度。

具体来说,DBI的计算公式如下:DBI(C) = (1/n) * sum(max(Rij + Rik)/Rij),其中i ≠j,C是聚类集合,n是聚类数量,Rij是聚类i和j之间的距离,Rik是聚类i内部样本与聚类j的距离。

下面将逐步讨论DBI的计算过程。

第一步:计算聚类中心点首先,我们需要找到每个聚类的聚类中心。

聚类中心是聚类内部所有样本的平均值。

可以通过计算每个聚类的所有样本的均值来获取。

第二步:计算聚类内样本的距离接下来,我们需要计算每个聚类内样本之间的距离。

可以使用合适的距离度量,例如欧氏距离、曼哈顿距离或闵可夫斯基距离,根据具体问题进行选择。

对于每对样本之间的距离,我们可以使用下述公式进行计算:dist(xi, xj) = sqrt((xi1 - xj1)^2 + (xi2 - xj2)^2 + ... + (xin - xjn)^2),其中xi 和xj 分别是聚类内的两个样本,n是特征数量。

第三步:计算聚类间的距离然后,我们需要计算聚类间的距离。

对于每对不同的聚类i和j,我们可以计算聚类中心之间的距离。

同样,我们可以使用适当的距离度量来计算。

第四步:计算DBI最后,我们可以使用上述计算的聚类内距离和聚类间距离来计算DBI。

通过将聚类间的平均距离除以聚类内的最大距离,我们可以得到每个聚类的DBI值。

最后,将所有聚类的DBI值相加并除以聚类数量,可以得到整体DBI值。

dbs算法的原理

dbs算法的原理

dbs算法的原理DBSCAN(Density-Based Spatial Clustering of Applicationswith Noise)是一种基于密度的聚类算法,用于在无监督学习中对数据集进行聚类。

与传统的聚类算法(如K-means)相比,DBSCAN能够发现任意形状的聚类,并且能够自动检测和过滤噪声数据点。

DBSCAN的原理主要包括密度可达、核心对象、直接密度可达和密度可达等概念。

1. 密度可达(Density Reachability):DBSCAN通过定义数据点之间的密度可达关系来判断数据点是否属于一个聚类。

对于给定的一个数据点p和半径ε,如果存在一个数据点q,q在半径ε内,并且存在一个由p到q的无限长的路径,该路径上的每一个数据点都在半径ε内,则称p密度可达q。

密度可达是一种自动适应密度的测量方式。

2. 核心对象(Core Object):对于给定的一个数据点p,如果p在半径ε内至少有最小样本数MinPts个数据点,则称p是一个核心对象。

核心对象是聚类形成的关键,它可以直接密度可达它的所有数据点并构成一个聚类。

3. 直接密度可达(Directly Density Reachable):对于给定的两个数据点p和q,如果p在半径ε内,在半径ε内存在一个核心对象,则称p直接密度可达q。

4. 密度可达(Density Reachable):对于给定的两个数据点p和q,如果存在一个数据点o1...on,满足p直接密度可达o1,o1直接密度可达o2,...,on直接密度可达q,则称p密度可达q。

基于上述概念,DBSCAN算法使用了两个重要的参数:半径ε和最小样本数MinPts。

算法流程如下:1.选择一个未被访问过的数据点p。

2.检查p是否是一个核心对象:- 如果p的周围半径ε内至少有最小样本数MinPts个数据点,则标记p为核心对象,并以p为中心,找到所有直接密度可达的数据点,构成一个聚类。

dbscan 密度聚类算法

dbscan 密度聚类算法

DBSCAN 密度聚类算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,可以发现任意形状的聚类,并能够在有噪声的数据集中识别出噪声点。

DBSCAN的基本思想是:对于任意一个点集,如果存在在该点周围半径为Eps 的领域内含有超过MinPts个点,则该点属于核心点。

在一个核心点及领域内的所有点构成一个簇。

如果两个核心点之间距离不超过Eps,则它们在最终的聚类中被连接起来。

一个既不是核心点也不在核心点的领域内的点被视为噪声点。

DBSCAN聚类算法的优点有:
1. 不需要预先指定聚类个数,可以发现任意形状的聚类。

2. 对于有噪声的数据具有强鲁棒性。

3. 对于密度变化较大的数据集,簇的形状可以适应数据集情况。

4. 对于大数据集有较好的可扩展性。

DBSCAN聚类算法的缺点有:
1. 效果受参数影响较大,如半径Eps的选取和最小密度MinPts的选取等。

2. 对于密度相差悬殊的聚类,聚类效果不如基于距离的聚类算法(如K-means)。

3. 由于需要计算点之间的距离和领域,因此对于高维数据集容易导致运算量很大。

在使用DBSCAN聚类算法时,需要预先确定好参数,并对结果进行分析,以便发现数据的特点和隐藏信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

dbscan聚类算法过程
DBSCAN聚类算法是一种基于密度的聚类算法,它可以将数据点分为不同的簇。

DBSCAN算法的过程如下:
1. 初始化:选择一个未被访问的数据点P,以及一个半径ε和一个最
小点数MinPts。

2. 寻找密度可达点:以P为中心,以半径ε为半径画一个圆,找到圆
内的所有数据点。

如果圆内的数据点数量大于等于MinPts,则将P标记为核心点,并将圆内的所有数据点加入P的邻域中。

3. 扩展簇:对于P的邻域中的每个数据点,如果该点未被访问过,则
以该点为中心,以半径ε为半径画一个圆,找到圆内的所有数据点。

如果圆内的数据点数量大于等于MinPts,则将该点标记为核心点,并将圆内的所有数据点加入P的邻域中。

如果该点是边界点,则将其加
入P所在的簇中。

4. 寻找下一个未被访问的数据点:如果P的邻域中还有未被访问的数
据点,则选择一个未被访问的数据点作为新的P,重复步骤2-3。

否则,算法结束。

DBSCAN算法的优点是可以发现任意形状的簇,并且可以将噪声数据点排除在外。

但是,该算法的缺点是对于不同密度的簇,需要调整不同的参数。

此外,该算法对于高维数据的处理效果不佳。

总之,DBSCAN聚类算法是一种基于密度的聚类算法,可以将数据点分为不同的簇。

该算法的过程包括初始化、寻找密度可达点、扩展簇和寻找下一个未被访问的数据点。

该算法的优点是可以发现任意形状的簇,并且可以将噪声数据点排除在外,但是需要调整不同的参数。

相关文档
最新文档