1. 机器学习
    +关注
    关注 2
    文章 382
    浏览量 29078
  2. python
    +关注
    关注 3
    文章 256
    浏览量 13949

如何使用python进行第一个机器学习项目(详细教程篇)

机器学习算法与鸿运国际手机版 2018-02-10 03:10 次阅读
你是否想使用python进行机器学习但却难以入门? 在这篇教程中,你将用Python完成你的第一个机器学习项目。 在以下的教程中,你将学到: 1.下载并安装Python SciPy,为Python中的机器学习安装最有用的软件包。 2.使用统计摘要和数据可视化加载数据集并了解其结构。 3.创建6个机器学习模型,并挑选出最佳模型以确保准确性。 如果你是一个机器学习初学者,并希望开始使用Python进行你的机器学习项目,那么本教程是为你量身打造的。 话不多说,开始正题吧

如何使用Python开始机器学习?

学习机器学习的最好方式是设计和完成小型项目。 在入门Python时遇到的困难 Python是一种当下流行并且功能强大的解释型语言。与R语言不同,Python是一个完善的语言和平台,能用来研究和开发。 还有很多模块和库可以选择,提供多种方式来完成每个任务。 开始使用Python进行机器学习的最好方法是完成一个项目。 它将促使你安装并启动Python解释器。 它让你全面的观察如何开发一个小项目。 它会给你信心,也许还会驱动你继续做自己的小项目。 初学者需要一个小型的端到端项目 很多书籍和课程让人失望。他们给你很多方法和片段,但你永远不会看到他们如何融合在一起。 当你将机器学习应用在自己的数据集时,你已经开始了一个项目。 机器学习项目可能不是线性的,但它有许多典型的步骤: 定义问题 准备数据 评估算法。 改善成绩。 得到结果。 真正开始新平台或工具的最好的方法是通过一个机器学习项目进行端到端的工作,并覆盖关键步骤。也就是从加载数据、总结数据、评估算法和做出一些预测。 如果可以这样做,你将有一个可以在数据集之后使用数据集上的模板。一旦你有更多的信心,你可以进一步的填补数据和改进结果的任务. 如何使用python进行第一个机器学习项目(详细教程篇)

机器学习的Hello World

开始使用新工具的最好的小项目是鸢尾花的分类(如鸢尾花数据集 https://archive.ics.uci.edu/ml/datasets/Iris)。 这是一个很好理解的项目。 属性是数值型的,因此你必须弄清楚如何加载和处理数据。 这是一个分类问题,让你可以练习更简单的监督学习算法。 这是一个多类的分类问题(多项式),可能需要一些专门的处理。 它只有4种属性和150行,这意味着它很小,很容易适应内存(以及屏幕或A4页面)。 所有的数值属性都是相同的单位和相同的比例,不需要任何特殊的缩放或变换就可以开始。 让我们开始使用Python中的hello world机器学习项目。 Python中的机器学习:分步教程 在本节中,我们将通过端到端的小型机器学习项目进行工作。 以下是我们将要介绍的内容: 安装Python和SciPy平台 加载数据集 汇总数据集 可视化数据集 评估一些算法 做一些预测 慢慢来,一步一步做。 你可以尝试自己输入命令也可以通过复制粘贴来加快速度。 1 下载,安装和启动Python SciPy 如果你的系统上尚未安装,请安装Python和SciPy平台。 我不想太详细地介绍这个,因为有别人已经介绍过了,这对一个开发人员来说很简单。 1.1安装SciPy库 本教程假设Python版本为2.7或3.5。 你需要安装5个关键库。以下是本教程所需的Python SciPy库列表: SciPy numpy matplotlib pandas sklearn 有很多方法来安装这些库,我的建议是选择一种方法,然后在安装每个库时保持一致。 该SciPy的安装页面(https://www.scipy.org/install.html)对多个不同的平台提供了极好的说明书,如Linux,Mac OS X和Windows。如果你有任何疑问或疑问,请参阅本说明。 在Mac OS X上,你可以使用macports来安装Python 2.7和这些库。 在Linux上,你可以使用包管理器,例如Fedora上的yum来安装RPM。 如果你使用Windows或者你没什么信心,我建议安装免费版本的Anaconda(https://www.anaconda.com/download/),其中包含你需要的一切。 注意:本教程假设你已经安装scikit-learn版本0.18或更高版本。 1.2启动Python并检查版本 确保你的Python环境安装成功并按预期工作,这是很有必要的。 下面的脚本将帮助你测试你的环境。它导入本教程中所需的每个库并打印出版本。 打开命令行并启动python解释器:
1 python
我建议直接在解释器中工作,或者编写脚本并在命令行上运行它们,而不是用大型编辑器和IDE。不要很复杂的操作,把中心放在机器学习而不是工具链上。 键入或者复制粘贴以下脚本:
01 # Check the versions of libraries
02  
03 # Python version
04 import sys
05 print('Python: {}'.format(sys.version))
06 # scipy
07 import scipy
08 print('scipy: {}'.format(scipy.__version__))
09 # numpy
10 import numpy
11 print('numpy: {}'.format(numpy.__version__))
12 # matplotlib
13 import matplotlib
14 print('matplotlib: {}'.format(matplotlib.__version__))
15 # pandas
16 import pandas
17 print('pandas: {}'.format(pandas.__version__))
18 # scikit-learn
19 import sklearn
20 print('sklearn: {}'.format(sklearn.__version__))
这是我在我的OS X工作站上得到的输出:
1 Python:2.7.11 (default, Mar 1 2016,18:40:10)
2 [GCC4.2.1 Compatible Apple LLVM7.0.2 (clang-700.1.81)]
3 scipy:0.17.0
4 numpy:1.10.4
5 matplotlib:1.5.1
6 pandas:0.17.1
7 sklearn:0.18.1
将以上输出与你的版本进行比较。 理想情况下,你的版本应该匹配或更新。这些API不会很快改变,所以如果你的版本更高,不必担心,本教程中的所有内容很有可能仍然适用于你。 如果你出现错误,请停止。现在是修复它的时候了。 如果你无法正常运行上述脚本,你将无法完成本教程。 我最好的建议是在Google上搜索你的错误信息 2 加载数据 我们将使用鸢尾花数据集。这个数据集很有名,因为它被用作机器学习和统计中的“hello world”。 该数据集包含150个鸢尾花观测值。有四列测量花的尺寸。第五列是观察到的花的种类。所有观察到的花属于三种物种之一。 在此步骤中,我们将从CSV文件的URL加载鸢尾数据。 2.1导入库 首先,我们将导入我们将在本教程中使用的所有模块,函数和对象。
01 # Load libraries
02 import pandas
03 from pandas.tools.plottingimport scatter_matrix
04 import matplotlib.pyplot as plt
05 from sklearnimport model_selection
06 from sklearn.metricsimport classification_report
07 from sklearn.metricsimport confusion_matrix
08 from sklearn.metricsimport accuracy_score
09 from sklearn.linear_modelimport LogisticRegression
10 from sklearn.treeimport DecisionTreeClassifier
11 from sklearn.neighborsimport KNeighborsClassifier
12 from sklearn.discriminant_analysisimport LinearDiscriminantAnalysis
13 from sklearn.naive_bayesimport GaussianNB
14 from sklearn.svmimport SVC
这些加载正常情况下是没错的。如果出现错误,请停止。回到上面,你需要一个可行的SciPy环境。请参阅上面关于设置环境的建议。 2.2加载数据集 我们可以直接从UCI机器学习存储库加载数据。 我们正在使用pandas来加载数据。我们还将使用pandas来探索具有描述性统计数据和数据可视化的数据。 请注意,我们在装载数据时指定了每个列的名称。这有助于我们稍后研究数据。
1 # Load dataset
2 url= "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
3 names= ['sepal-length','sepal-width','petal-length','petal-width','class']
4 dataset= pandas.read_csv(url, names=names)
数据集应该会加载的很顺利 如果你有网络问题,可以下载iris数据(https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)。将文件放入工作目录,并使用相同的方法加载它,将URL更改为本地文件名。 3 汇总数据集 现在是查看数据的时候了。 在这一步中,我们将以几种不同的方式来查看数据: 数据集的维度。 仔细观察数据本身。 所有属性的统计汇总。 按类变量细分数据。 记住查看数据,一个数据集就是一个命令。这些都是有用的命令,你可以在以后的项目中反复使用。 3.1数据集的尺寸 我们可以快速通过shape属性了解数据中包含多少个实例(行)和多少个属性(列)
1 # shape
2 print(dataset.shape)
你应该看到150个实例和5个属性:
1 (150,5)
3.2观察数据 仔细观察你的数据
1 # head
2 print(dataset.head(20))
你应该会看到数据的前20行:
01     sepal-length  sepal-width  petal-length  petal-width       class
02 0            5.1          3.5           1.4          0.2  Iris-setosa
03 1            4.9          3.0           1.4          0.2  Iris-setosa
04 2            4.7          3.2           1.3          0.2  Iris-setosa
05 3            4.6          3.1           1.5          0.2  Iris-setosa
06 4            5.0          3.6           1.4          0.2  Iris-setosa
07 5            5.4          3.9           1.7          0.4  Iris-setosa
08 6            4.6          3.4           1.4          0.3  Iris-setosa
09 7            5.0          3.4           1.5          0.2  Iris-setosa
10 8            4.4          2.9           1.4          0.2  Iris-setosa
11 9            4.9          3.1           1.5          0.1  Iris-setosa
12 10           5.4          3.7           1.5          0.2  Iris-setosa
13 11           4.8          3.4           1.6          0.2  Iris-setosa
14 12           4.8          3.0           1.4          0.1  Iris-setosa
15 13           4.3          3.0           1.1          0.1  Iris-setosa
16 14           5.8          4.0           1.2          0.2  Iris-setosa
17 15           5.7          4.4           1.5          0.4  Iris-setosa
18 16           5.4          3.9           1.3          0.4  Iris-setosa
19 17           5.1          3.5           1.4          0.3  Iris-setosa
20 18           5.7          3.8           1.7          0.3  Iris-setosa
21 19           5.1          3.8           1.5          0.3  Iris-setosa
3.3统计汇总 现在我们可以看一下每个属性的总结。 这包括计数,平均值,最小值和最大值以及一些百分位数。
1 # descriptions
2 print(dataset.describe())
我们可以看到,所有的数值都有相同的单位(厘米),范围在0到8厘米之间。
1        sepal-length  sepal-width  petal-length  petal-width
2 count   150.000000   150.000000    150.000000   150.000000
3 mean      5.843333     3.054000      3.758667     1.198667
4 std       0.828066     0.433594      1.764420     0.763161
5 min        4.300000     2.000000      1.000000     0.100000
6 25%        5.100000     2.800000      1.600000     0.300000
7 50%        5.800000     3.000000      4.350000     1.300000
8 75%        6.400000     3.300000      5.100000     1.800000
9 max        7.900000     4.400000      6.900000     2.500000
3.4分类 现在来看看属于每个类的实例(行)的数量。我们可以将其视为绝对数。
1 # class distribution
2 print(dataset.groupby('class').size())
我们可以看到每个类具有相同数量的实例(50或者说33%的数据集)。
1 class
2 Iris-setosa       50
3 Iris-versicolor   50
4 Iris-virginica    50
4 数据可视化 我们现在对数据有一个基本的了解。我们需要通过一些可视化来让自己更了解它。 我们要看两种图: 单变量图让你更好地了解每个属性。 多变量图让你更好地了解属性之间的关系。 4.1单变量图 我们从一些单变量开始,即每个变量的曲线。 鉴于输入变量是数值型,我们可以创建每个输入变量的盒型图。
1 # box and whisker plots
2 dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
3 plt.show()
这使我们对输入属性的分布有了更清晰的认识,我们还可以创建每个输入变量的直方图来获得分布的概念。
1 # histograms
2 dataset.hist()
3 plt.show()
看起来可能有两个输入变量具有高斯分布。这一点很有用,因为我们可以使用这种假设比较算法的准确性。 4.2多变量图 现在我们可以看一下变量之间的相互作用。 首先,我们来看看所有属性对的散点图。这可以有助于发现输入变量之间的结构化关系。
1 # scatter plot matrix
2 scatter_matrix(dataset)
3 plt.show()
注意这些接近对角线的组,这是高度的相关性和可预测关系的表现。 5 评估算法 现在创建一些数据模型,并评估它们对未来数据预测的准确性。 下面是我们将要讨论的内容是: 抽离一个验证数据集。 设置测试工具使用10倍交叉验证。 建立5种不同的模型来预测花卉测量中的种类。 选择最好的模型。 5.1创建验证数据集 我们需要知道,我们创建的模型有什么用。 之后,我们将使用统计方法来估计我们在预测的数据上创建模型的准确性。我们还希望通过对实际预测数据进行评估,从而更具体地估计出最佳模型的准确性。 也就是说,我们将保留一些算法无法看到的数据,我们将利用这些数据来确定模型究竟有多精确。 我们将把加载的数据集分为两部分,其中80%将用于训练我们的模型,20%将被用作验证数据集。
1 # Split-out validation dataset
2 array= dataset.values
3 X= array[:,0:4]
4 Y= array[:,4]
5 validation_size= 0.20
6 seed= 7
7 X_train, X_validation, Y_train, Y_validation= model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)
你现在可以在X_train和Y_train中训练数据为准备模型和X_validation和Y_validation集,因为我们一会儿用得上。 5.2测试工具 我们将使用10倍交叉验证来估计精度。 这将把我们的数据集分为10个部分,在9上训练,并在1上进行测试,并重复训练分组的所有组合。
1 # Test options and evaluation metric
2 seed= 7
3 scoring= 'accuracy'
我们使用“ accuracy” 的度量来评估模型。这是正确预测实例的数量除以数据集中的实例总数乘以100的百分比(例如95%准确)的比率。 当我们运行构建并评估每个模型时,我们将使用评分变量。 5.3建立模型 我们不知道哪些算法对这个问题或什么配置使用是好的。我们从图中得出一些想法,即某些类在某些方面是部分可线性分离的,所以我们期望一般的结果很好。 我们来评估6种不同的算法: 逻辑回归(LR) 线性判别分析(LDA) 邻近算法(KNN)。 分类和回归树(CART)。 高斯朴素贝叶斯(NB)。 支持向量机(SVM)。 这是简单线性(LR和LDA),非线性(KNN,CART,NB和SVM)算法的良好混合。我们在每次运行之前重置随机数种子,以确保使用完全相同的数据分割来执行每个算法的评估。它确保结果直接可比。 我们来建立和评估我们的五个模型:
01 # Spot Check Algorithms
02 models= []
03 models.append(('LR', LogisticRegression()))
04 models.append(('LDA', LinearDiscriminantAnalysis()))
05 models.append(('KNN', KNeighborsClassifier()))
06 models.append(('CART', DecisionTreeClassifier()))
07 models.append(('NB', GaussianNB()))
08 models.append(('SVM', SVC()))
09 # evaluate each model in turn
10 results= []
11 names= []
12 for name, modelin models:
13     kfold= model_selection.KFold(n_splits=10, random_state=seed)
14     cv_results= model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
15     results.append(cv_results)
16     names.append(name)
17     msg= "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
18     print(msg)

5.4选择最佳模型
我们现在每个都有6个模型和精度估计。我们需要将模型相互比较,并选择最准确的。 运行上面的例子,我们得到以下原始结果: LR: 0.966667 (0.040825)LDA: 0.975000 (0.038188)KNN: 0.983333 (0.033333)CART: 0.975000 (0.038188)NB: 0.975000 (0.053359)SVM: 0.981667 (0.025000) 我们可以看到,看起来KNN具有最高的估计精度分数。 我们还可以创建模型评估结果的图,并比较每个模型的差异和平均精度。每个算法有一个精确度量的群体,因为每个算法被评估10次(10次交叉验证)。
1 # Compare Algorithms
2 fig= plt.figure()
3 fig.suptitle('Algorithm Comparison')
4 ax= fig.add_subplot(111)
5 plt.boxplot(results)
6 ax.set_xticklabels(names)
7 plt.show()

你可以看到盒型图在顶部被压扁,许多样品达到100%的准确度。
6 做预测 KNN算法是我们测试的最精确的模型。现在我们想了解验证集上模型的准确性。 这让我们对最佳模型的准确性进行独立的最终检查。保持一个验证集是有用的,以防万一你在训练过程中犯错,比如过拟合或数据外泄。两者都将导致过于乐观的结果。 我们可以直接在验证集上运行KNN模型,并将结果总结为最终准确度分数,混淆矩阵和分类报告。
1 # Make predictions on validation dataset
2 knn= KNeighborsClassifier()
3 knn.fit(X_train, Y_train)
4 predictions= knn.predict(X_validation)
5 print(accuracy_score(Y_validation, predictions))
6 print(confusion_matrix(Y_validation, predictions))
7 print(classification_report(Y_validation, predictions))

我们可以看到准确度是0.9即90%。混淆矩阵提供了三个错误的指示。最后,分类报告通过精确度,召回率,f1分数和支撑显示出优异的结果(授予验证数据集很小)提供每个类别的细目。
view source
01 0.9
02  
03 [[7  0  0]
04  [0 11  1]
05  [0  2  9]]
06  
07              precision    recall  f1-score   support
08  
09 Iris-setosa      1.00      1.00      1.00         7
10 Iris-versicolor  0.85      0.92      0.88        12
11 Iris-virginica   0.90      0.82      0.86        11
12  
13 avg/ total      0.90      0.90      0.90        30
完成上面的教程,只需要5到10分钟。 7 概要 在这篇文章中,你会逐步发现如何在Python中完成第一个机器学习项目。 你将发现,完成一个小型的端到端项目并将数据加载到预测中,是熟悉新平台的最佳途径。

机器学习算法与鸿运国际手机版 技术专区

  1. 区块链在未来应用发展的主要趋势和应用场景
  2. 基于深度学习对在2018年的10个预测解析
  3. 结合学习经历,谈一谈如何学习Python
  4. 国内鸿运国际手机版产业正快速发展并且市场空间广阔
  5. 三大“关键词”来了解AI
原文标题:教程篇 | 一步步教你如何使用python进行第一个机器学习项目 文章出处:【微信号:machinelearningai,微信公众号:机器学习算法与鸿运国际手机版】欢迎添加关注!文章转载请注明出处。
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

AI芯片如何保持芯片通用性

神经网络计算芯片已经引起了全球各个学院/企业的广泛关注,“软件定义芯片”相关研究,适应AI算法不断变....
发表于 02-13 10:22 次阅读 0条评论
AI芯片如何保持芯片通用性

什么是神经网络?学习鸿运国际手机版必会的八大神经网络盘点

神经网络是一套特定的算法,是机器学习中的一类模型,神经网络本身就是一般泛函数的逼近,它能够理解大脑是....
发表于 02-11 11:17 次阅读 0条评论
什么是神经网络?学习鸿运国际手机版必会的八大神经网络盘点

量子计算机的瓶颈在哪里?首要任务是加速机器学习

神经网络和量子处理器会擦出什么样的火花?神经网络和量子处理器有一个共同点:那就是它们竟然能实现。训练....
的头像 鸿运国际手机版头条 发表于 02-11 10:58 次阅读 0条评论
量子计算机的瓶颈在哪里?首要任务是加速机器学习

分享python编程经历

Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的....
的头像 马哥Linux运维 发表于 02-09 15:27 次阅读 0条评论
分享python编程经历

深度学习的概念、发展状况以及和机器学习的区别和应用

一般来说,深度学习适用于计算量更大的情况,而机器学习技术相对更易于使用。
的头像 Thundersoft中科创达 发表于 02-09 14:41 次阅读 0条评论
深度学习的概念、发展状况以及和机器学习的区别和应用

Rodney Brooks:新技术从开发到应用需要的时间比我们预期的更久

制造电动汽车和可重复使用的火箭是一件相对容易的事情;而飞行汽车,或Hyperloop超级高铁系统(或....
的头像 人间烟火123 发表于 02-09 10:31 次阅读 0条评论
Rodney Brooks:新技术从开发到应用需要的时间比我们预期的更久

Python在web应用实现部署的协议与实现协议的工具解析

php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情。相比起来,Py....
的头像 马哥Linux运维 发表于 02-09 09:26 次阅读 0条评论
Python在web应用实现部署的协议与实现协议的工具解析

一张图学会Python3的基本用法

这不Github上一位大神就把 Python 3 的几乎所有语法重点都整理到了一张图上,对于有编程基....
的头像 马哥Linux运维 发表于 02-09 09:22 次阅读 0条评论
一张图学会Python3的基本用法

用2句话来学懂Python 最难知识点:元类

在python世界,拥有一个永恒的道,那就是“type”,请记在脑海中,type就是道。如此广袤无垠....
的头像 马哥Linux运维 发表于 02-09 09:16 次阅读 0条评论
用2句话来学懂Python 最难知识点:元类

拆解深度学习生态系的五个层级

浅谈深度学习的架构,主要可分为训练(Training)与推论(Inference)两个阶段。简单来说....
发表于 02-09 08:48 次阅读 0条评论
拆解深度学习生态系的五个层级

介绍脑机接口在应用系统实现取得的成果以及目前进展和未来发展趋势

脑机接口(brain-computer interface,BCI)通过解码人类思维活动过程中的脑神....
的头像 鸿运国际手机版学家 发表于 02-08 18:16 次阅读 0条评论
介绍脑机接口在应用系统实现取得的成果以及目前进展和未来发展趋势

VisualDx App以机器学习协助皮肤科医生诊断

VisualDx采用苹果(Apple)开发的机器学习算法「Core ML」分析皮肤影像,若是使用苹果....
发表于 02-08 14:11 次阅读 0条评论
VisualDx App以机器学习协助皮肤科医生诊断

鼓励新创公司和市场竞争 美研究机器学习演算法加速器

众所周知,芯片设计是一项非常复杂的又困难的大算法工程,纵观目前的硬件市场都是有少数厂商所把持。为了鼓....
发表于 02-08 11:02 次阅读 0条评论
鼓励新创公司和市场竞争 美研究机器学习演算法加速器

解析训练集的过度拟合与欠拟合

在数据科学学科中, 过度拟合(overfit)模型被解释为一个从训练集(training set)中....
的头像 将门创投 发表于 02-07 17:00 次阅读 0条评论
解析训练集的过度拟合与欠拟合

通过机器学习,鸿运国际手机版能主动识别想自杀的人,并想办法阻止自杀

日前,中科院行为科学重点实验室的互联网心理危机(自杀)监测预警中心,采用鸿运国际手机版软件,在特定的网络空....
的头像 高工智能未来 发表于 02-07 15:01 次阅读 0条评论
通过机器学习,鸿运国际手机版能主动识别想自杀的人,并想办法阻止自杀

Medopad与美大学合作推动临床医疗机器学习

英国健康科技公司Medopad与美国Johns Hopkins University签署了合作备忘录....
发表于 02-07 12:59 次阅读 0条评论
Medopad与美大学合作推动临床医疗机器学习

华为麒麟970的NPU(神经网络处理器)到底是什么鬼

华为麒麟970的NPU(神经网络处理器)、Google Pixel 2内置的IPU(图像处理器),以....
的头像 嵌入式资讯精选 发表于 02-12 11:19 次阅读 0条评论
华为麒麟970的NPU(神经网络处理器)到底是什么鬼

自动化技术将以稳定步伐前进

第四次工业革命除了为人类带来前景,也制造了许多恐惧。70多年来,人类社会对于自动化的恐惧可说是一种周....
发表于 02-07 08:37 次阅读 0条评论
自动化技术将以稳定步伐前进

了解OOP三大特点中继承的优缺点

作为一名程序员或者准程序员,对于面向对象编程简直熟悉的不能再熟悉。作为当今最流行的编程思想之一(或许....
的头像 马哥Linux运维 发表于 02-06 14:54 次阅读 0条评论
了解OOP三大特点中继承的优缺点

解析9件你可能不知道的关于鸿运国际手机版的事情

许多公司都认为,AI不仅会影响他们的产品和服务,而且会影响他们业务的方方面面。仔细阅读,这里有9件你....
的头像 重庆鸿运国际手机版 发表于 02-06 10:55 次阅读 0条评论
解析9件你可能不知道的关于鸿运国际手机版的事情
鸿运国际手机版