机械学习备忘录 | AUC值的含义与计量方式

据书上说揣度结果的不比,你的示范会被分成分化的水彩,之后可用混淆矩阵和别的自定义格局进行拍卖,从分裂特点的角度浮现测度结果。

用户只需单击一个按钮,就可以将数据点与模型预测分化结果的最相似点实行比较。大家称那些点为“Counterfactuals”,能够来得出预测模型的决策边界。用户也能够手动编辑数据点,并研讨模型预测的成形。

代码

在知晓了AUC值的估测计算原理后,大家再来看看怎么样在代码中落实它。平时很多的机械学习工具都打包了模型指标的盘算,当然也囊括AUC值。那里大家来共同看下scikit-learnAUC的测算格局,如下所示:

>>> import numpy as np
>>> from sklearn.metrics import roc_auc_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> roc_auc_score(y_true, y_scores)
0.75

能够见到,使用scikit-learn工具提供的roc_auc_score函数总结AUC值极度简单,只要求提供样本的实际标签和预测值那多个变量即可,大大有利于了我们的选拔,真心谢谢那么些开源软件的小编们!

正文为 AI 研习社编译的技艺博客,原标题 :

Linear Classifier

作者 | Thomas Pernet

翻译 | 邓普斯•杰弗、涂世文、Disillusion

校对 | 邓普斯•杰弗 审核| 酱番梨 整理 | 菠萝妹

初稿链接:

成效六:查看混淆矩阵和ROC曲线

Github:

定义

AUC的齐全是Area under the Curve of
ROC
,也就是ROC曲线下方的面积。那里出现了另二个概念,就是ROC曲线。那么ROC曲线是个怎样事物吧?我们参看下维基百科上的概念:在信号检查和测试理论中,接收者操作特征曲线(receiver
operating characteristic
curve
,或者叫ROC曲线)是一种坐标图式的剖析工具,用于 (1)
接纳最棒的信号侦测模型、抛弃次佳的模子。 (2)
在平等模型中设定最棒阈值。那个定义最早是由世界二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具。归纳来说,能够把ROC曲线通晓为一种用于总计分析的图片工具。

那么具体到机械学习的说理中,ROC曲线该怎么精通吧?首先,必要提出的是,ROC剖析的是二元分类模型,也正是出口结果唯有两体系型的模子,比如:(阴性/阴性)(有病/没病)(垃圾邮件/非垃圾邮件)。在二分类难点中,数据的价签日常用(0/1)来代表,在模型练习达成后展开测试时,会对测试集的每种样本总括三个介于0~1之间的概率,表征模型认为该样本为阴性的概率,大家能够选定一个阈值,将模型计算出的可能率进行二值化,比如选定阈值=0.5,那么当模型输出的值超出等于0.5时,大家就以为模型将该样本预测为阴性,也正是标签为1,反之亦然。选定的阈值区别,模型预测的结果也会相应地改变。二元分类模型的单个样本预测有各类结果:

  1. 真阴性(TP):判断为阴性,实际也是中性(neuter gender)。
  2. 伪中性(neuter gender)(FP):判断为中性(neuter gender),实际却是中性(neuter gender)。
  3. 真中性(neuter gender)(TN):判断为中性(neuter gender),实际也是阴性。
  4. 伪阴性(FN):判断为中性(neuter gender),实际却是阴性。

那各样结果能够画成2 × 2的混淆矩阵:

图片 1

二阶混淆矩阵

有了混淆矩阵,就足以定义ROC曲线了。ROC曲线将假阴性率(FP君越)定义为
X 轴,真阴性率(TP君越)定义为 Y 轴。个中:

  • TP翼虎:在有着实际为中性(neuter gender)的样本中,被正确地认清为阴性的样本比率。
  • FPQashqai:在全部实际为阴性的范本中,被错误地认清为阴性的样本比率。
  • TPR = TP / (TP + FN)
  • FPR = FP / (FP + TN)

给定一个二分类模型和它的阈值,就足以依照全部测试集样本点的真实值和预测值总计出三个(X=FP景逸SUV, Y=TPCRUISER)
坐标点,那也便是绘制单个点的法子。那整条ROC曲线又该怎么画吗?具体方法如下:

在大家练习完三个二分类模型后,能够选用该模型对测试集中的漫天样本点总计三个应和的票房价值值,各个值都介于0~1之间。借使测试集有玖拾6个样本点,大家得以对这玖拾柒个样本的预测值从高到低排序,然后逐一取种种值作为阈值,一旦阈值鲜明大家就足以绘制ROC曲线上的贰个点,遵照那种情势依次将玖拾8个点绘制出来,再将逐条点依次连接起来,就拿走了我们想要的ROC曲线!

下一场再回来最初的题材,AUC值其实正是ROC曲线下方所覆盖的面积,当大家绘制出ROC曲线之后,AUC的值自然也就计算好啊。

多项式项

What-If Tool首要有七大效用,不晓得有没有你须求的那一款:

编辑:大明

总结

看到那里的小伙伴们是还是不是对AUC值的概念有了更好的掌握吧。总的来说,AUC值正是1个用来评价二分拣模型优劣的常用目标,AUC值越德州仪器常注明模型的职能越好,在其实应用中大家得以信赖软件包的照应函数举行快捷计算。假诺各位还有一对题材大概是对小说中的有些部分有疑点,欢迎在评论区切磋。

CONTI_FEATURES_NEW = ['age', 'fnlwgt','capital_gain', 'education_num', 'capital_loss', 'hours_week', 'new']continuous_features_new = [tf.feature_column.numeric_column for k in CONTI_FEATURES_NEW]

高度一点,你就能相比较数据点与模型预测出分歧结果的最相似点。大家将这一个点称为“反事实”(Counterfactuals),能够反映出模型的仲裁边界。

要回答那个题材并不易于。要应对那么些“借使”难题,日常要编写自定义的2次性代码来分析特定模型。那一个进度不仅效能低下,而且除了程序员,别的人很难加入创新机器学习模型的经过。

参考

ROC曲线维基百科
张伟楠先生课件
机械学习和总结里面包车型客车auc怎么驾驭? –
腾讯网

在用TensorFlow磨练线性分类器在此以前,要求执行多少个步骤。您供给安不忘忧要含有在模型中的特征。在规范回归中,您将使用原来数据而不选择任何转换。

用L1或L2距离从选定的数据点创立距离天性,并将其可视化进行更为分析。

图片 2

引言

在机械学习世界,AUC值平常用来评论二个二分类模型的教练成效,对于许多机械学习或然数额挖掘的从业者或在校学员来说,AUC值的定义也每每被提起,但鉴于多数时候我们都以信赖一些软件包来磨练机器学习模型,模型评价指标的测算往往被软件包所封装,因而大家平时会忽视了它们的切实可行意思,那在稍微时候会让大家对此手头正在开始展览的职务感到纳闷。作者也曾遇到类似的难题,由此愿意借由正文来梳理下AUC值的意义与计量方法,通超过实际际的例子扶助读者加深驾驭,同时提交了选用scikit-learn工具库计算AUC值的方式,供各位参考。

图片 3image

作用七:测试算法公平性限制

研讨数据点上的What-if情景

示例

此处引用上海艺术高校张伟楠先生机器学习课件中的例子来表达:

图片 4

AUC计算示例

如上海体育场面所示,大家有九个测试样本,模型的预测值(按大小排序)和范本的真人真事标签如右表所示,绘制ROC曲线的整个经过如下所示:

  1. 令阈值等于首个预测值0.91,全体大于等于0.91的预测值都被判定为阴性,此时TP纳瓦拉=四分一,FPQX56=0/4,全体我们有了第多少个点(0.0,0.25)
  2. 令阈值等于第二个预测值0.85,所有大于等于0.85的预测值都被判定为阴性,那种地方下第三个样本属于被破绽百出预测为阴性的中性(neuter gender)样本,也正是FP,所以TP帕杰罗=1/4,FP昂Cora=四分一,所以我们有了第三个点(0.25,0.25)
  3. 遵从这种艺术依次取第2 、四…个预测值作为阈值,就能挨个得到ROC曲线上的坐标点(0.5,0.25)、(0.75,0.25)…(1.0,1.0)
  4. 将逐条点依次连接起来,就拿走了如图所示的ROC曲线
  5. 计算ROC曲线下方的面积为0.75,即AUC=0.75
def square_var(df_t, df_te, var_name = 'age'): df_t['new'] = df_t[var_name].pow df_te['new'] = df_te[var_name].pow return df_t, df_te

What-If Tool介绍主页:

创设急忙的机械学习系统,要求建议并搞定许多题材。仅仅演练模型然后就放着不管是远远不够的。特出的机器学习从业者要像侦探一样,时刻放在心上探索怎样更好地领悟塑造的模型:数据点的变化将对模型的预计结果造成哪些震慑?同一个模型对分歧的群落会有怎么着分裂的表现?用来测试模型的数据集的各类化程度怎样等等。

您能够用教育这么的另叁个特点来划分年龄。也正是说,某些群众体育的受益只怕很高,而任何群体的纯收入恐怕非常的低。

传送门

Google AI
PAI昂Cora布置的四个根本便是让更广泛的人群能够更有利地对机器学习种类开始展览检查、评估和调剂。

1000次迭代后的终极损失是5444。您能够在测试集中估量您的模子并查阅性能。要评估模型的属性,供给选用对象evaluate。您向模型提供测试集,并将epoch的多少设置为1,即数据将只输入模型一次。

职能一:可视化估摸结果

图片 5

  1. 日增多项式项

  2. 将三番五次变量变为离散变量

图片 6

特征性别只可以有五个价值:男性或女性。当大家转移特征性时,TensorFlow将开创多少个新列,二个用来男性,二个用来女性。尽管性别等于男性,那么新的列“男性”将相当于1,而“女性”将等于0。此示例展现在下表中:

图片 7

下图所示数据集中的人脸图像遵照头发是或不是为铁锈色分开,七个图像中的每一组都建立一条ROC曲线和一个预测结果的混淆矩阵,再设置3个置信度滑块,设定模型必须在当先某一置信度时才能判断目的的颜面是微笑的。本例中,What-If工具自动安装两组的置信度阈值,以优化模型,达成机会均等。

当分类器对具有正在进行完全分类时,最大得分为1。精确度本身并不是很有赞助,因为它忽略了负类。衡量平日与召回成对出现。回想也被号称敏感性或真阴性率。

图片 8

检查和测试错误分类:多类分类模型,模型依照对植物的花的七次考察来预测植物的类别。What-if工具有助于突显模型的决策边界,弄清导致错误分类的缘由。

图片 9image

对于二分类模型来说,这么些工具得以将您的多少集分成子数据集,继而探索差异算法公平性约束(fairness
constraints)的影响。

What-If工具作用强大,能够应用Facets自动展现数据集,从数额集手动编辑示例并查阅更改的功能,还能够自动生成都部队分正视图(partial
dependence
plots),呈现模型的前瞻结果随任何单个功用的改动而变化的状态。

上边,我们组织了3个有多少个变量的图,x和y。很举世瞩目,那种关系不是线性的。假如我们添加线性回归,大家可以观察模型不或许捕获情势。今后,从下面的图样看右边的图样,我们在回归中添加了五项。

效用三:发掘单个特征的功能

倒计时 8

model.train(input_fn=get_input_fn(df_train, num_epochs=None, n_batch = 128, shuffle=False), steps=1000)INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 0 into ongoing/train/model.ckpt.INFO:tensorflow:loss = 88.722855, step = 1INFO:tensorflow:global_step/sec: 95.9134INFO:tensorflow:loss = 52583.64, step = 101 (1.044 sec)INFO:tensorflow:global_step/sec: 167.726INFO:tensorflow:loss = 25203.816, step = 201 (0.596 sec)INFO:tensorflow:global_step/sec: 162.827INFO:tensorflow:loss = 54924.312, step = 301 (0.614 sec)INFO:tensorflow:global_step/sec: 226.156INFO:tensorflow:loss = 68509.31, step = 401 (0.443 sec)INFO:tensorflow:global_step/sec: 143.237INFO:tensorflow:loss = 9151.754, step = 501 (0.701 sec)INFO:tensorflow:global_step/sec: 140.458INFO:tensorflow:loss = 34576.06, step = 601 (0.710 sec)INFO:tensorflow:global_step/sec: 131.307INFO:tensorflow:loss = 36047.117, step = 701 (0.764 sec)INFO:tensorflow:global_step/sec: 150.417INFO:tensorflow:loss = 22608.148, step = 801 (0.665 sec)INFO:tensorflow:global_step/sec: 162.276INFO:tensorflow:loss = 22201.918, step = 901 (0.615 sec)INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train/model.ckpt.INFO:tensorflow:Loss for final step: 5444.363.<tensorflow.python.estimator.canned.linear.LinearClassifier at 0xb202e4668>

—回去和讯,查看越多

What-If工具的耳闻目睹应用

例如,预测顾客是还是不是会进展三遍购进便是1个典型的二分类难题。而识别图片中出现动物则是属于多分类难题,因为其真实意况况中动物有很三种。

图片 10

模型品质和算法公平性分析

线性模型

小编:

在那种场所下,对于选定的数据点,模型预测该人年收入抢先5万美金的信度为73%。该工具自动定位数据汇总最相似的人,模型预测其年收入低于5万加元,然后将选定数据点和与之最相似、但猜想结果反而的数据点进行并排比较。一般来说图所示,二者唯有在年龄和事情上设有微小的歧异,但模型的前瞻结果已经完全相反了。

教练多少集合包蕴32561组数据,测试数据集中包括16281组数据;

不错,只需为TensorFlow模型和数据集提供指针,What-If
Tool就能交付叁个可用来探索模型结果的可互相的视觉界面。

图片 11

让我们回去大家的例证。年龄与收入没有线性关系。由于孩子或年轻人不坐班,早年的纯收入只怕类似零。然后它在干活年龄上平添,在退休时期减少。它一般是二个倒U形。捕获那种形式的一种方式是在回归中添加一个2遍项。

对此富含描述真实标签天性的二分类模型和演示,使用阈值、ROC曲线、数值混淆矩阵和资金财产比交互式地研讨模型品质。

第三步:数据转载

图片 12

调查模型在区别子群众体育中的表现:回归模型可以用于依照人口普查消息预测受试者的年华。What-if工具能呈现出模型在差异子群众体育中的相对表现,以及区别特色如何独立影响预测结果。该模型使用比利时人口普遍检查数据集进行磨炼。

第5步:超参数:Lasso & Ridge

图片 13

## Add features to the bucket: ### Define continuous listCONTI_FEATURES = ['age', 'fnlwgt','capital_gain', 'education_num', 'capital_loss', 'hours_week']### Define the categorical listCATE_FEATURES = ['workclass', 'education', 'marital', 'occupation', 'relationship', 'race', 'sex', 'native_country']

图片 14

倒计时**8**天

譬如说,假设指标是预测客户是还是不是会买卖产品。标签可为如下:

7大功能

我们将What-If工具在谷歌内部组织中开始展览了测试,该工具在测试中显现出了平素价值。有集体高效发现他们的模子错误地忽视了数据集的全体特征,修复了此前未察觉的代码错误。
还有团队行使该工具将模型示例按性质高到低排列出来,并发现表现倒霉的模子示例的周转方式。

让大家用对象model.train来练习模型。您能够行使在此之前概念的函数向模型提供合适的值。请留心,您将批大小设置为128,并且将epoch数设置为none。模型将通过1000多步的陶冶。

效益二:编辑八个数据点,看模型表现怎么着

检查和测试错误分类、评估模型公平性、调查模型分化数据集

现行反革命分类器是用新的数据集设计的,那么就能够锻练和评估模型了。

在谷歌官方博客上,商讨人口还发表了用预练习模型实行的一组演示,比如检查和测试错误分类的案由,评估二元分类模型的公平性和查证差异子数据汇总模型的变现等。能够运动官方博客查看愈来愈多,博客地址:

回来天涯论坛,查看更多

新的准确度是83.57%。它比在此从前的模子高4%。最终,您能够添加叁个正则化项来防护过度拟合。

用户还是能研究不一样分类阈值的震慑,同时考虑分歧数值公平性标准等约束规范。下图所示为微笑探测器模型的结果,该模型在开源CelebA数据集上操练,数据集是已标记的头面人物面部图像。

正如您事先看来的,线性分类器不可能正确捕获年龄收入格局。那是因为它为每一个脾气学习二个权重。为了使分类器更易于,您能够做的一件事是将特色存款和储蓄起来。Bucketing依据数字特征所处的限定将其更换为多少特定特征,这个新特色中的每叁个都指示一个人的年华是或不是在该限制内。利用这一个新特征,线性模型能够经过学习每一个桶的两样权重来捕获关系。在TensorFlow中,它是用bucketized_column完成的。您须要在边际中添加值的限量。

What-If
Tool里作用很多,包含活动用Facets将数据集可视化,也有从数额集中手动编辑示例并查阅更改效果的意义,还是能自动生成都部队分关系图,突显模型预测随着单个特征的改观而改变的方向。

图片 15

model_1.train(input_fn=get_input_fn(df_train, num_epochs=None, n_batch = 128, shuffle=False), steps=1000)INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 0 into ongoing/train1/model.ckpt.INFO:tensorflow:loss = 88.722855, step = 1INFO:tensorflow:global_step/sec: 65.4699INFO:tensorflow:loss = 70077.66, step = 101 (1.533 sec)INFO:tensorflow:global_step/sec: 166.451INFO:tensorflow:loss = 49522.082, step = 201 (0.599 sec)INFO:tensorflow:global_step/sec: 172.15INFO:tensorflow:loss = 107120.57, step = 301 (0.577 sec)INFO:tensorflow:global_step/sec: 135.673INFO:tensorflow:loss = 12814.152, step = 401 (0.741 sec)INFO:tensorflow:global_step/sec: 147.318INFO:tensorflow:loss = 19573.898, step = 501 (0.675 sec)INFO:tensorflow:global_step/sec: 205.764INFO:tensorflow:loss = 26381.986, step = 601 (0.486 sec)INFO:tensorflow:global_step/sec: 188.238INFO:tensorflow:loss = 23417.719, step = 701 (0.531 sec)INFO:tensorflow:global_step/sec: 226.805INFO:tensorflow:loss = 23946.049, step = 801 (0.441 sec)INFO:tensorflow:global_step/sec: 183.742INFO:tensorflow:loss = 3309.5786, step = 901 (0.544 sec)INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train1/model.ckpt.INFO:tensorflow:Loss for final step: 28861.898.<tensorflow.python.estimator.canned.linear.LinearClassifier at 0xb20308ba8>model_1.evaluate(input_fn=get_input_fn(df_test_new, num_epochs=1, n_batch = 128, shuffle=False), steps=1000)INFO:tensorflow:Calling model_fn.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-08-29-19:10:49INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train1/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Evaluation [100/1000]INFO:tensorflow:Finished evaluation at 2018-08-29-19:10:51INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.7944229, accuracy_baseline = 0.76377374, auc = 0.6093755, auc_precision_recall = 0.54885805, average_loss = 111.0046, global_step = 1000, label/mean = 0.23622628, loss = 14119.265, precision = 0.6682401, prediction/mean = 0.09116262, recall = 0.2576703INFO:tensorflow:Saving 'checkpoint_path' summary for global step 1000:{'accuracy': 0.7944229,'accuracy_baseline': 0.76377374,'auc': 0.6093755,'auc_precision_recall': 0.54885805,'average_loss': 111.0046,'label/mean': 0.23622628,'loss': 14119.265,'precision': 0.6682401,'prediction/mean': 0.09116262,'recall': 0.2576703,'global_step': 1000}

不用写代码?

主编:

第贰步:数据转换

图片 16

图片 17

平方变量在数码集中称为new。您需求将其添加到连续功效列表中。

新智元将于五月31日在新加坡国家会议中央设立AI WO奥迪Q7LD
2018社会风气人工智能高峰会议,MIT物理教师、今后生命钻探所创办者、《生命3.0》笔者MaxTegmark,将刊登解说《我们怎么样利用AI,而不是被其压制》,切磋怎么着面对AI军事化和杀人民武装器的面世,欢迎到实地沟通!

3个好的实践是基于特征的类型定义四个特征列表,然后将它们传递到预计器的特征列中。

明天,谷歌推出了已开源的TensorFlow可视化学工业具TensorBoard中一项新作用:What-If
Tool,用户可在不编写程序代码的图景下分析机器学习(ML)模型。

在上边包车型大巴截图中,该工具用于二进制分类模型,该模型依照比利时人口普遍检查数据集的国有人普数据,预测一位的年收入是不是超越5万英镑。那是机械学习切磋人口使用的规格预测任务,越发是在分析算法的公平性时。

在上边包车型地铁代码中,您将在颇具分类效果上创制3个巡回。

功用五:按相似度排列示例

后天,我们正式发表What-If工具,该工具是开源的TensorBoard
Web应用程序的一项新效率,它同意用户在不编写代码的情景下分析机器学习模型。
What-If工具给出了TensorFlow模型和数据集的指针,提供了一个交互式可视化界面,用于探索模型结果。

逻辑函数

原题目:无需写代码!谷歌(谷歌)生产机器学习模型分析神器,代号What-If

只需一键,自动比较数据点与模型预测最相似点

  1. 整数

  2. 对象

成效四:探索反事实示例

大家愿意谷歌内外的众人都来行使What-If工具,以更好地明白机器学习模型,并初步评估预测模型的公平性。
大家的代码是开源的,欢迎对该工具继续添砖加瓦。

分类器能够将可能率转化为类

铜灵 编写翻译整理

上边详细介绍What-If工具的多少个效能。

函数有3个参数:

您可以编写制定、添加或删除任何选定数据点的特征或特色值,然后运维测度来测试模型质量,也可上传全新示例。

What-If工具呈现一组250张面部图片及其检测微笑模型的结果

df_train_new, df_test_new = square_var(df_train, df_test, var_name = 'age')

可是,那还不是What-If Tool的漫天实力。

对Counterfactuals的可比。三个人只有在年纪和职业上存在微小的差距,但模型的揣测结果早就完全相反

你已经熟知了总计权重的不二法门。权重总计使用点积:θ^ Tx + b

能够用来探索为当选数据点中的单个特征自动生成的图,呈现特征使得值分裂时揣测结果的变动。

经过那一个例子,您将明白怎样用张量流估摸磨练线性分类器,以及哪些增强准确度目标。

250张人脸和在模型中检测微笑后的结果

图片 18image

评估二元分类模型的公平性:地点提到的用来微笑表情检查和测试的图像分类模型。What-if工具有助于评估差异子图像组的算法公平性。在该模型的教练中,有意没有提供来自特定人群的示范,目标是为着显示What-if工具怎样能够表露模型中的那种过错。对模型预测公平性的评估要求密切考虑全体背景,可是What-if工具是3个使得的量化起源。

AutoML :无人驾乘机器学习模型设计自动化

【新智元导读】谷歌(Google) AI推出“what-if
”工具,用户完全不需求编写制定代码就能分析机器学习模型。该工具提供交互式可视化界面,用户能够商讨并相比模型结果,能够神速地觉察模型中的错误。

请小心,您将选取Pandas dataframe来磨炼分类器。

来源:Google AI

AI研习社每天更新美丽内容,观察越多卓越内容:

为了表达What-if工具的效果,大家选拔预先陶冶的模子公布了一组德姆o:

该函数可进一步分为两有个别:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website