![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
机器学习初阶
文章平均质量分 54
梧桐雪
I am MetaWu from a magicverse where Models are all wrong, some of which are useful.
展开
-
R语言学习系列教程及高级绘图工具使用
R语言系列教程引言:每天学点R语言R语言的安装Rstudio的安装和运行R语言常用语法代码示例R语言数据导入测试代码及数据R语言数据操作示例及数据R语言数据操作进阶及控制结构R语言中处理图形的一般方法R语言图形绘制R语言常见图形的绘制R语言统计入门代码大全常见研究设计分析的 R函数R语言统计-回归分析R语言回归分析PCA & tSNE聚类分析机器学习ggplot2的用法Shiny高级可视化免费的在线科研绘图和数据分析系统-hiplothiplot简介原创 2021-05-11 16:24:46 · 484 阅读 · 0 评论 -
使用R语言绘制graph:无向图(ug)和有向无环图(dag)
首先我们需要安装R语言,参考【软件】R语言-3.6.3 安装教程一文,安装完之后我们打开编辑器。3.5版本之后,source命令不能用了,需要使用Bioconductor的话,我们需要在console中安装BiocManager,作为包管理的程序,我们使用一下命令:install.packages("BiocManager")我们选择离自己比较近的镜子之后就可以使用以下指令来查看可以安装的包:BiocManager::available()或者具体看某个包是否可以安装,最后会先出所有和这个包原创 2021-05-11 15:37:41 · 4813 阅读 · 1 评论 -
R语言写的贝叶斯模型预测造灯机损坏概率
已知:先验分布-造灯机损坏的概率为0.01,正常工作的概率为0.99,即,P(M=working)=0.99P(M=working)=0.99P(M=working)=0.99P(M=broken)=0.01P(M=broken)=0.01P(M=broken)=0.01似然概率分布-机器在正常工作条件下做出好灯泡的概率为0.99,在损坏概率夏造出好灯泡的概率为0.6,即,P(L=good∣M=woking)=0.99P(L=good|M=woking)=0.99P(L=good∣M=woking)=0原创 2021-05-11 09:30:43 · 444 阅读 · 1 评论 -
使用单层反向传播神经网络(感知机模型)预测男女
问题现在有某个地区,以下人口信息数据集作为训练集合测试集:训练集:测试集:我们需要建立一个单层神经网络感知机模型,通过反向传播的方法来对这个数据集建立预测模型,并且来预测一个1.8m,体重60kg的人是男还是女。这个模型包括正向传播计算梯度、反向传播更新梯度、测试集验证等部分组成,我们使用sigmoid函数作为输出层的激活函数。分析我们可以建立逻辑回归的感知机模型,根据以下公式更新公式,经过若干次迭代之后得到w,b,然后使用w,b作为权重和输入数据作用后激活进行预测。代码import原创 2021-01-01 00:12:47 · 532 阅读 · 0 评论 -
使用 SciPy探索标准正态分布
文章目录一、正态分布的概念二、代码:使用Scipy探索正态分布特性三、运行结果一、正态分布的概念正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution),最早由棣莫弗(Abraham de Moivre)在求二项分布的渐近公式中得到。C.F.高斯在研究测量误差时从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。正态曲线呈钟型,两头低,原创 2020-12-12 14:40:22 · 2148 阅读 · 0 评论 -
机器学习之树模型的学习(二):基于Bagging的随机森林
文章目录一、随机森林的概念二、Bagging(袋装法)三、Bagging随机森林的算法流程四、随机森林的注意要点五、随机森林的优点六、一图总结一、随机森林的概念随机森林,顾名思义就是一系列“树”的集合,在机器学习里面,这些树当然指的就是决策树了,每一颗决策树相当于是一个学习器,许多树学习器集合在一起,然后通过类似民主投票的方式来做决策,这就是我们经常提到的集成学习(Ensemble Learning)。没错,随机森林属于集成学习(Ensemble Learning)中的bagging算法。在集成学习中,原创 2020-12-02 23:06:09 · 1643 阅读 · 0 评论 -
机器学习之树模型的学习(一):决策树
文章目录一、决策树的概念二、决策树的构件过程三、决策树的特点四、决策树的使用五、 一图总结一、决策树的概念决策树是一种机器学习的方法。决策树的生成算法有ID3, C4.5和C5.0等。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。决策树是一种十分常用的分类方法,需要监管学习(有教师的Supervised Learning),监管学习就是给出一堆样本,每个样本都有一组属性和一个分类结果,也就是分类结果已知,那么通过学习这些样本原创 2020-12-01 21:57:57 · 1885 阅读 · 0 评论 -
机器学习基础—偏差和方差(Bias and Variance)根据StatQuest教程翻译
有目录不迷路一、偏差(Bias)的概念二、方差(variance)的概念三、方差-偏差的trade-off一、偏差(Bias)的概念如下图所示,蓝色点表示若干老鼠的身高体重样本,我们通过肉眼观察不难发现,体重Weight和身高Height之间存在着一种“凸型曲线”式的非线性关系,所以我们用线性回归的办法,很难准确地得到这两个因素之间真实的数量关系。偏差,就是用来衡量模型的预测值与实际值之间的偏离关系的概念。二、方差(variance)的概念上面的直线是高偏差的,我们可以通过一定的方法来减少偏差值,原创 2020-11-30 12:24:22 · 372 阅读 · 0 评论 -
基尼系数(Gini Impurity)的理解和计算
一、基尼指数的概念基尼指数(Gini不纯度)表示在样本集合中一个随机选中的样本被分错的概率。注意:Gini指数越小表示集合中被选中的样本被参错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。当集合中所有样本为一个类时,基尼指数为0.二、基尼系数的计算公式基尼指数的计算公式为:三、计算示例我们分别来计算一下决策树中各个节点基尼系数:以下excel表格记录了Gini系数的计算过程。我们可以看到,GoodBloodCircle的基尼系数是最小的,也就是最不容易犯错误,因此我们应该把这个原创 2020-11-29 14:50:31 · 50088 阅读 · 7 评论 -
win10完美复现U^2-Net神经网络人物肖像画生成,街头画师都要失业了
今年提出的 U^2-Net 显著性检测算法(GitHub链接),刷爆了 reddit 和 twitter,号称是 2020 年「地表最强」的静态背景分割算。我们可以在JackCui的公众号文章中看到中文版的介绍。这两天画了一点时间研究这个网络,并且在自己的win10电脑上跑通了程序,得到了AI生成肖像画,接化发浑元形意太极门马掌门镇楼,效果如下:一、运行环境1.1 显卡硬件准备我们需要建立一个合适的运行环境,这个折腾了我很久。首先我们的电脑得有一张Nvidia的显卡,我用的是RTX 2070,有8G原创 2020-11-28 15:59:46 · 2202 阅读 · 8 评论 -
图解时间序列的深度学习(RNN&LSTM)
对于时间序列,我们无法使用CNN来处理一些问题,这个时候,就需要引入新的深度学习网络结构了,RNN和LSTM就是两个非常经典的工具。他们的结构分别如下所示:RNN的结构图有些时候,我们需要联系上下文,而不仅仅是前文,因此我们引入了双向RNN:不严谨的,我们可以把RNN的知识要点整理成一下脑图:LSTM如果时间序列太长,RNN就会遇到梯度爆炸和梯度消失的问题,因为在求梯度的过程中的链式法则使得梯度的计算值和序列的长度高度依赖,为了解决这个问题,我们需要遗忘一些东西,这个时候,我们就可以使用L原创 2020-11-19 17:43:39 · 2477 阅读 · 0 评论 -
阿里云天池机器学习训练营(Day1打卡):基于逻辑回归的分类预测
一、学习内容概括二、具体学习内容1.逻辑回归的介绍和应用1.1 逻辑回归的介绍逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热,但实则这些传统方法由于其独特的优势依然广泛应用于各个领域中。而对于逻辑回归而且,最为突出的两点就是其模型简单和模型的可解释性强。逻辑回归模型的优劣势:优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低;缺点:原创 2020-11-04 20:45:11 · 956 阅读 · 0 评论 -
python实现最小二乘法进行线性拟合
基本原理最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。对于线性拟合,最小二乘法存在解析解,其矩阵形式的公式如下所示:XB=Y⇒B=(XTX)−1XTY\mathbf{X B}=\mathbf{Y} \Rightarrow \mathbf{B}=\left(\mathbf{X}^{T} \mathbf{X}\right)^{-1}原创 2020-10-22 22:28:42 · 10561 阅读 · 3 评论 -
matplotlib绘制伯努利分布的概率密度图
根据伯努利分布的定义,我们可以得到以下公式:f(x)=px(1−p)1−x for x∈{0,1}f(x)=p^{x}(1-p)^{1-x} \quad \text { for } x \in\{0,1\}f(x)=px(1−p)1−x for x∈{0,1}当我们进行观测,得到了事件xxx发生频率的观测值(代码中假设是0.5,比如抛硬币1000次,500次朝上、500次朝下),我们就可以画出伯努利分布的概率p的密度图。import numpy as npimpo原创 2020-09-24 23:49:10 · 3468 阅读 · 0 评论 -
以判定好瓜和坏瓜为例使用Python实现机器学习算法:朴素贝叶斯
基于简单的西瓜数据集,使用Bayes分类器对西瓜进行分类,直接上代码,具体的解释在代码中都注释了。import numpy as npimport pandas as pdclass NaiveBayes(): def __init__(self,X,y): self.X = X self.y = y def nb_fit(self,X,y): #通过unique方法来提取分类的种类 #在这个案例中,y只有两类1和-1,在其他的案例中,可能会有多分类标签 classes =原创 2020-09-24 15:02:09 · 6287 阅读 · 0 评论 -
使用神经网络用Fashion-MNIST数据集搭建一个用于辨认时尚单品的机器学习模型
一、预备工作1.1 安装tensorflow等第三方库pip install -q tensorflow==2.0.0-alpha0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com如果提示升级pip,按照提示的命令输入即可1.2 下载数据集https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gzhtt原创 2020-09-12 03:17:03 · 778 阅读 · 0 评论 -
python可视化线性拟合的机器学习(Machine Learning)过程
一、导入需要的库import numpy as npimport pandas as pdimport matplotlib.pyplot as plt二、初始化参数x_points = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]y_points = [1, 2, 3, 1, 4, 5, 6, 5, 7, 10, 15, 9]m = 0b = 0y = lambda x: m * x + blearn = 0.01三、编写权重更新函数def su原创 2020-08-28 00:13:06 · 884 阅读 · 0 评论 -
通俗易懂用一章图可视化解释贝叶斯公式求解后验概率计算过程
我们可以用以下一个例子通俗易懂地解释贝叶斯公式的意义和他的计算过程。首先我们来给出场景,假设:一个学校开设有两个专业:工科和商科;学校内的学生性格分为两种:内向和外向;我们用变量A来表示学生的专业,A=1表示专业是工科,A=0表示专业是商科;同样的,我们使用变量B来表示学生的性格,B=1表示内向,B=0表示外向。我们假设工科生的比例为P(A)=1/3,则商科生的比例P(A‾\overline{A}A)=1-P(A);假设内向的人的比例为P(B)=1/4,则外向人的比例为P(B‾\overline{B原创 2020-07-31 21:18:28 · 2110 阅读 · 0 评论 -
10小时完成AI入门级项目复盘:使用Tesenflow建立CNN模型进行自动驾驶模拟
首先庆幸一下发现了一个非常好的python人工智能项目的入门网站MURTAZA’S WORKSHOP,上面的教程涵盖了opencv、self-drivng、robotic、原创 2020-07-14 11:56:22 · 1673 阅读 · 7 评论 -
使用python的opencv库使用yolo算法进行物体检测
Yolov3是一个目标检测算法项目,而目标检测的本质,就是识别与回归,而处理图像用的最多的就是卷积神经网络CNN,所以,Yolov3本质上,就是一个实现了回归功能的深度卷积神经网络。Yolo是一种实时检测方法,多年来备受欢迎。这意味着我们不仅可以对一个对象进行分类,还可以定位它并提取包围该对象的边框。运行yolov3有多种方法。我们今天将使用的方法是最简单的方法之一,因为除了opencv和numpy之外,它不需要外部安装。当然,我们需要下载模型文件,yolo中的模型文件将architecture(结构原创 2020-07-10 16:38:22 · 1918 阅读 · 1 评论 -
线性多分类图解python实现
今天在看多分类问题的时候发现吴恩达的视频里面出现了这样的图形,类似于线性多分类器:觉得很有意思,于是使用python编写代码画了一下,思路和代码如下:本质上来说,这个二输入的线性多分类问题是输入x1x_1x1和x2x_2x2坐标之后经过神经网络得到输出层的三个判别值,那个值最大,我们就认为坐标对应的点属于这个判别值对应的那一类。所以,我们要设计得到三个判别值计算的权值,得到三个线性表达式,然后取这三个线性表达式取值最大的那一个。在经过若干次尝试取权值之后,我选择了如下代码中体现的权值:from原创 2020-06-30 16:05:36 · 820 阅读 · 0 评论 -
NFL(没有免费午餐)定律的理解
如果任何“未知”的f可能发生,那么从D中学习(推断D之外的东西)注定是要失败的。原创 2020-05-18 13:57:38 · 1111 阅读 · 0 评论 -
机器学习基础概念:使用不同类型的protocol进行学习
Lecture3 of Machine Learning Foundations一、机器学习的两大问题1.分类问题(Classification)2.回归问题(Regression)其他问题还包括聚类、降维等等,但是以上两类是最基础的。二、机器学习算法的类型1.监督学习(Supervised)2.非监督学习(Unsupervised)3.半监督学习(Semi-supervised)4.强化学习(Reinforcement)三、学习算法的protocol1.批处理(Batach)2.在原创 2020-05-18 13:34:00 · 357 阅读 · 0 评论 -
对PLA(PerceptronLearningAlgorithm)算法的理解
PLA是一个比较简单的分类模型,本质上来说对于线性可分的问题,所谓感知机模型,就是通过一个简单的线性模型来判断所给样本x⃗\vec{x}x的类别yyy,用数学公式表示就是:y=sig(w⃗⋅x⃗)y=sig(\vec{w}\cdot\vec{x})y=sig(w⋅x)如果y>0y>0y>0,就判定样本为正类,反之,就判定样本为负类。PLA通过不断的纠错来调整感知机模型的参数w⃗\vec{w}w。Case1 训练样本为正类我们假设训练样本x⃗\vec{x}x为正类,那么x⃗\vec{x}原创 2020-05-15 19:41:37 · 361 阅读 · 0 评论 -
一张图理解对分、增长函数、打散、突破点、VC维
对分(Dichotomy)、增长函数(Growth Function)、突破点(Break Point)是计算学习理论中非常重要的概念,也是机器学习的基石。可以说如果不理解计算学习理论,那就不能从根本上理解机器学习。机器学习最基本的问题是二分类和回归,在这里我们讨论的是二分类的问题。我们知道有很多二分类的模型,我们把这些模型称为分类器,常见的分类器有下面几种:正射线正间隔一维感知机二维...原创 2020-05-08 11:16:40 · 3018 阅读 · 0 评论 -
最简单的机器学习代码:利用sklearn完成最简单的线性回归拟合
以下代码读取salary.xlsx中的数据,完成最简单的线性拟合机器学习,堪称是最简单的人工智能代码。import pandas as pdimport numpy as npfrom sklearn.metrics import accuracy_scorefrom sklearn.model_selection import train_test_splitfrom sklearn....原创 2020-05-03 11:43:31 · 1047 阅读 · 0 评论 -
3B1B启发的线性变换的直观理解
最近发现了一个宝藏视频3B1B,这个由斯坦福大学学生开发的在线科普网站使用python的manim库制作了可视化的视频教程帮助普通人理解高等数学(包括线性代数、微积分、神经网络、微分方程)等内容。看了线性代数部分,发现是对之前学习的一个非常好的总结。之前买了一本《机器学习中的线性代数》,花了很多时间,大概一天只能看完一章,但是这个视频,差不多可以用10分钟左右的时间学完一章,可以说是非常节省时间了...原创 2020-04-25 10:48:19 · 4424 阅读 · 0 评论 -
手把手教你AdaBoost的配套代码
知乎强文手把手教你AdaBoost是理解集成学习的很好教材,根据此文,我编写了一下python代码,可以用来可视化展示经过提升算法之后的分类器图像。核心的逻辑其实就是这步之间的左右互搏:一、根据权重weights获得最优学习器G和alpha值二、最优学习器G和alpha值更新权重weights我们把学习器G和alpha封装到一个IndividualLearner的类D中,这个模型简直可以用D...原创 2020-04-23 01:15:19 · 553 阅读 · 0 评论 -
函数对向量的求导
我们一般对函数求导,是对单变量求导,但是在机器学习中,会遇到多元函数对向量求导的情况,比如:f(w⃗)=12∣∣w⃗∣∣2 f(\vec{w})=\frac{1}{2}||\vec{w}||^2f(w)=21∣∣w∣∣2其中,w⃗=(w1,w2,⋯ ,wn)\vec{w}=(w_1,w_2,\cdots,w_n)w=(w1,w2,⋯,wn)我们会看到在数学公式推导中会遇到函数对向量的求...原创 2020-04-17 17:37:53 · 10324 阅读 · 1 评论 -
拉格朗日乘子法的本质
拉格朗日乘子法的本质是为了做凸函数的优化。凸函数的优化,说的直白一点就是求某个函数的最小值。如果没有约束的话,优化问题就是一道非常基础高中作业题,求求导数找到极值点就可以求最小值了。然而现实是残酷的,真实的世界中有很多条条框框,这个事不能做,那个事也不能做,我们把这些规则限定称为:约束(constrain)。在数学中,有两种约束,一种叫做等式约束,一种叫做不等式约束。我们可以使用g(x)=...原创 2020-04-17 13:32:32 · 1132 阅读 · 0 评论 -
机器学习第五周笔记(贝叶斯)
贝叶斯决策论后验概率期望损失(Expected Loss)条件风险(Conditional Risk)R(Ci∣x) R(Ci|x) R(Ci∣x)最小化总体风险R(h)=E(x)[R(h(x)∣x)]R(h)=E(x)[R(h(x)|x)]R(h)=E(x)[R(h(x)∣x)]h(x)为总样本空间到y的一个映射hypothesis贝叶斯判定准则(Bayes decision r...原创 2020-04-14 12:09:51 · 1164 阅读 · 0 评论 -
机器学习第五周笔记(神经网络)
神经元模型M-P神经元模型简单的说,神经元就是存放数据的一个存储单元过程关键词:输入、权重、阈值、激活函数激活函数理想的激活函数是阶跃函数,但是数学特性不理想(在(0,1)点,不连续、不光滑、不可导),所以我们经常使用sigmoid函数来作为激活函数。感知机和多层网络感知机简单的感知机模型:由多个神经元组成,包含输入与输出层。感知机的学习能力有限,仅在线性可分问题上收敛,可...原创 2020-03-31 12:41:13 · 1709 阅读 · 0 评论 -
机器学习第四周笔记(决策树)
决策树决策树模型树结构:根节点、叶节点内部节点:对应属性上的测试(相当于分支结构判定器)叶节点:对应一个预测结果(相当于结论)分支:对应测试的某种可能结果(即属性的取值)策略:分而治之、划分属性递归返回:同一类别、无法划分、样本为空基本算法:感觉就像是一系列if else语句的嵌套划分选择信息熵:度量样本纯度的一种指标;节点的信息熵可以通过公式计算;信息增益:通过信息熵...原创 2020-03-24 14:15:27 · 179 阅读 · 0 评论 -
西瓜书机器学习笔记(第三课):线性模型
线性模型的基本形式向量表现形式:y=w’x+b目标:求均方误差最小的w和b线性回归线性回归问题的闭合解线性回归的矩阵表示对数几率回归将线性模型稍作变化: ln(y) = w’t+b如果我们把ln函数抽象为一种广义的函数(联系函数g()),就可以得到广义线性模型:g(y)=w’t+b寻找单调可微分的函数来实现二分类任务,这样可以使得计算结果从0和1的离散跳跃问题编程连续的...原创 2020-03-24 09:51:36 · 264 阅读 · 0 评论 -
梯度更新方式
批量梯度下降优化目标:误差平方梯度更新:θn=θo-ηδ随机梯度下降和批量梯度下降相比,不需要对每个数据求梯度计算做平均对比批量梯度下降:更快地更新参数,但是在学习中不定性或震荡小批量梯度下降算法思想:批量梯度下降和随机梯度下降的结合,批量梯度下降优秀的稳定性和随机梯度下降的快速更新小批量梯度下降很容易做并行化,通过不同的线程去执行然后加和这些梯度基本搜索步骤随机...原创 2020-03-11 19:49:31 · 1247 阅读 · 0 评论 -
机器学习中的判别模式和生成模式
判别模型对可观测变量和未知变量的关联性建模又称条件模型确定性判别(显性函数)vs随机判别(概率分布)直接建模预测标签与已知对象之间的关系易于定义特定依赖的特征和模型实际上产生更高的预测性能线性回归、逻辑回归、k邻近、支持向量机、多层感知机、决策树、随机森林#生成模型(高级版的概率论)建立数据的联合概率分布给定一些隐参数和隐变量进行条...原创 2020-03-11 19:13:19 · 298 阅读 · 0 评论 -
机器学习的数学基础:概率论篇
和机器学习相关的数学知识域统计学:概率论、统计推断、验证、误差估计、置信区间线性代数:降维技术、数据线性变换的紧凑表示最优化理论概率空间输出集合Ω可能事件E的集合F概率分布P概率论公理概率非负所有概率相加为1不想交事件可加离散概率空间(抛硬币)连续投掷3枚硬币,有8中可能的结果可能的结果有258种组合(事件E)连续概率空间(老美的身高)有无数种取值...原创 2020-03-11 17:16:51 · 415 阅读 · 0 评论 -
西瓜书机器学习笔记(第一课):绪论
发展历程诞生的标志:达特茅斯会议,1956年,麦卡锡、明斯基、香农、西蒙、纽厄尔等;机器模仿人类表现其他方面的智能。第一阶段:推理期(Logic Reasoning)1956-1960s,西蒙、纽厄尔的逻辑理论家、通用问题求解;第二阶段:知识期(Knowledge Engineering)1970s-1980s,费根鲍姆的专家系统;第三阶段:学习期(Machine Learning)19...原创 2020-03-11 10:48:08 · 201 阅读 · 0 评论 -
4个numpy知识点实现K折验证数据集划分
K折数据集验证是机器学习中的一个常用的方法,原理简单的说就是把一个大的数据集切成k个小部分,然后每次迭代使用其中的1个小部分作为测试集,这样可以实现一个数据集的多次使用,解决机器学习中的样本问题。在sklearn这个库中,已经封装好了cross_val_score这个库可以直接调用。不过我们我们需要自力更生,采用numpy(简称np)来实现对数据集的k折划分。实现这个功能需要的知识点如下:使用...原创 2020-03-11 08:54:45 · 545 阅读 · 0 评论 -
对PR图的理解
在学习分类问题的性能度量中,提出了查准率P和查全率R两个概念,可以根据模型结果测算出P值和R值绘制PR曲线,那么PR曲线是怎么绘制出来的呢?首先我们要理解分类结果混淆矩阵如下:其中T=True表示真,F=False表示假,P=Positive表示正例,N=Negative表示反例。这样就可以定义查准率P=TP/TP+FP(准确性)和查全率R=TP/TP+FN(完整性)了。查全率和查准率也是此...原创 2020-03-10 13:17:09 · 6968 阅读 · 0 评论