如何在 Python 中开始机器学习?(小白必看)

其实学习机器学习的最好方法是设计和完成小项目。

Python 是一种流行且功能强大的解释型语言。与 R 不同,Python 是一种完整的语言和平台,可用于研究和开发以及开发生产系统。

还有很多模块和库可供选择,提供多种方式来完成每项任务。

开始使用 Python 进行机器学习的最佳方式是完成一个项目。

  • 安装并启动 Python 解释器。
  • 逐步完成一个小项目的、图。
  • 在其中你也会收获成就感,一边接下来一直做下去

初学者需要一个小的端到端项目

大家可以参考一下基础步骤:

  1. 定义问题。
  2. 准备数据。
  3. 评估算法。
  4. 改善结果。
  5. 呈现结果。

真正适应新平台或工具的最佳方法是端到端地完成机器学习项目并涵盖关键步骤。就是从加载数据、汇总数据、评估算法和做出一些预测。

做完这些之后,你就有了一个模板,你可以在其他数据集上使用,之后再进一步的数据准备和改进结果任务。

Python 中的机器学习:分步教程

在本节中,我们将端到端地完成一个小型机器学习项目。

以下是我们将要介绍的内容的概述:

  1. 安装 Python 和 SciPy 平台。
  2. 加载数据集。
  3. 总结数据集。
  4. 可视化数据集。
  5. 评估一些算法。
  6. 做出一些预测。

完成每一步,尝试自己输入命令或复制并粘贴命令。

具体操作教程:

1. 下载、安装和启动 Python SciPy

系统上安装 Python 和 SciPy 平台,

1.1 安装 SciPy 库

本教程假设 Python 版本为 2.7 或 3.6+。

您需要安装 5 个关键库。以下是本教程所需的 Python SciPy 库列表:

  • scipy
  • numpy
  • matplotlib
  • pandas
  • sklearn

有很多方法可以安装这些库。我最好的建议是选择一种方法。

该SciPy的安装页面提供了多个不同的平台,如Linux,Mac OS X和Windows上安装上述库极好的说明。(觉得使用记得给小普一个点赞,编辑不易~)

  • 在 Mac OS X 上,您可以使用 macports 来安装 Python 3.6 和这些库。
  • 在 Linux 上,您可以使用包管理器(例如 Fedora 上的 yum)来安装 RPM。

如果您使用的是 Windows ,我建议安装Anaconda的免费版本。

注意:本教程假设您安装了 scikit-learn 0.20 或更高版本。

需要的话,小普会出一些教程:

如何使用Anaconda为机器学习设置Python环境

如何使用Python3创建用于机器学习的Linux虚拟机

1.2 启动Python并检查版本

确保您的 Python 环境已成功安装并按预期工作是一个好主意。

下面的脚本将帮助您测试您的环境。它导入本教程中所需的每个库并打印版本。

打开命令行并启动python解释器:

python

我建议直接在解释器中工作或编写脚本而不是大型编辑器和 IDE 上运行它们,专注于机器学习而不是工具链。

键入或复制并粘贴以下脚本:

# Check the versions of libraries
 
# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))

 这是我在 OS X 工作站上得到的输出:

Python: 3.6.11 (default, Jun 29 2020, 13:22:26) 
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)]
scipy: 1.5.2
numpy: 1.19.1
matplotlib: 3.3.0
pandas: 1.1.0
sklearn: 0.23.2

将上述输出与您的版本进行比较。

理想情况下,你的版本应该匹配或更新。API 不会快速更改,因此如果你落后几个版本,这个教程也适用。

2. 加载数据

我们将使用鸢尾花数据集。这个数据集很出名,因为它被几乎所有人用作机器学习和统计中的“hello world”数据集。

该数据集包含 150 个鸢尾花的观察结果。花有四列以厘米为单位的测量值。第五列是观察到的花的种类。所有观察到的花都属于三个物种之一。

你可以网商搜索相关数据集

在这一步中,我们将从 CSV 文件 URL 加载。

2.1 导入库

首先,让我们导入我们将在本教程中使用的所有模块、函数和对象。

# Load libraries
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
...

如果有错误,可能需要一个有效的 SciPy 环境。请参阅上面有关设置环境的建议。

2.2 加载数据集

我们可以直接从 UCI 机器学习存储库加载数据。

我们正在使用Pandas 加载数据。接下来,我们还将使用 Pandas 通过描述性统计和数据可视化来探索数据。

请注意,我们在加载数据时指定了每列的名称。这将有助于稍后我们探索数据。

# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)

数据集应该正常加载。

如果您确实有网络问题,您可以将iris.csv文件下载到您的工作目录并使用相同的方法加载它,将 URL 更改为本地文件名。

3. 总结数据集

现在是查看数据的时候了。

在这一步中,我们将通过几种不同的方式查看数据:

  1. 数据集的维度。
  2. 查看数据本身。
  3. 所有属性的统计汇总。
  4. 按类变量细分数据。

别着急,每看一次数据就是一个命令。这些是有用的命令,您可以在未来的项目中反复使用。

3.1 数据集维度

我们可以通过 shape 属性快速了解数据包含多少个实例(行)和多少个属性(列)。

...
# shape
print(dataset.shape)

应该看到 150 个实例和 5 个属性:

(150, 5)

3.2 查看数据

实际观察您的数据也总是一个好主意。

...
# head
print(dataset.head(20))

您应该看到数据的前 20 行:


    sepal-length  sepal-width  petal-length  petal-width        class
0            5.1          3.5           1.4          0.2  Iris-setosa
1            4.9          3.0           1.4          0.2  Iris-setosa
2            4.7          3.2           1.3          0.2  Iris-setosa
3            4.6          3.1           1.5          0.2  Iris-setosa
4            5.0          3.6           1.4          0.2  Iris-setosa
5            5.4          3.9           1.7          0.4  Iris-setosa
6            4.6          3.4           1.4          0.3  Iris-setosa
7            5.0          3.4           1.5          0.2  Iris-setosa
8            4.4          2.9           1.4          0.2  Iris-setosa
9            4.9          3.1           1.5          0.1  Iris-setosa
10           5.4          3.7           1.5          0.2  Iris-setosa
11           4.8          3.4           1.6          0.2  Iris-setosa
12           4.8          3.0           1.4          0.1  Iris-setosa
13           4.3          3.0           1.1          0.1  Iris-setosa
14           5.8          4.0           1.2          0.2  Iris-setosa
15           5.7          4.4           1.5          0.4  Iris-setosa
16           5.4          3.9           1.3          0.4  Iris-setosa
17           5.1          3.5           1.4          0.3  Iris-setosa
18           5.7          3.8           1.7          0.3  Iris-setosa
19           5.1          3.8           1.5          0.3  Iris-setosa

3.3 统计汇总

现在我们可以看一下每个属性的摘要。

这包括计数、平均值、最小值和最大值以及一些百分位数。

...
# descriptions
print(dataset.describe())

我们可以看到,所有的数值都具有相同的刻度(厘米),并且在 0 到 8 厘米之间具有相似的范围。

       sepal-length  sepal-width  petal-length  petal-width
count    150.000000   150.000000    150.000000   150.000000
mean       5.843333     3.054000      3.758667     1.198667
std        0.828066     0.433594      1.764420     0.763161
min        4.300000     2.000000      1.000000     0.100000
25%        5.100000     2.800000      1.600000     0.300000
50%        5.800000     3.000000      4.350000     1.300000
75%        6.400000     3.300000      5.100000     1.800000
max        7.900000     4.400000      6.900000     2.500000

3.4 类分布

现在让我们看看属于每个类的实例(行)数。我们可以将其视为绝对计数。

...
# class distribution
print(dataset.groupby('class').size())

我们可以看到每个类都有相同数量的实例(数据集的 50 或 33%)。

class
Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50

3.5 完整示例

作为参考,我们可以将之前的所有元素组合到一个脚本中。

下面列出了完整的示例。

4. 数据可视化

我们现在对数据有了一个基本的了解。我们需要通过一些可视化来扩展它。

我们将看两种类型的图:

  1. 单变量图以更好地理解每个属性。
  2. 多变量图以更好地理解属性之间的关系。

4.1 单变量图

我们从一些单变量图开始,即每个单独变量的图。

鉴于输入变量是数字变量,我们可以创建每个变量的箱线图。

...
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
pyplot.show()

这让我们对输入属性的分布有了更清晰的了解:

我们还可以创建每个输入变量的直方图以了解分布情况。

...
# histograms
dataset.hist()
pyplot.show()

 看起来可能有两个输入变量具有高斯分布。这很有用,因为我们可以使用可以利用这个假设的算法。

 

4.2 多元图

现在我们可以看看变量之间的相互作用。

首先,让我们看一下所有属性对的散点图。这有助于发现输入变量之间的结构化关系。

...
# scatter plot matrix
scatter_matrix(dataset)
pyplot.show()

注意一些属性对的对角线分组。这表明高度相关性和可预测的关系。

.3 完整示例

作为参考,我们可以将之前的所有元素组合到一个脚本中。

下面列出了完整的示例。

 

# visualize the data
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
pyplot.show()
# histograms
dataset.hist()
pyplot.show()
# scatter plot matrix
scatter_matrix(dataset)
pyplot.show()

5. 评估一些算法

现在是时候创建一些数据模型并估计它们对看不见的数据的准确性了。

这是我们将在此步骤中介绍的内容:

  1. 分离出一个验证数据集。
  2. 设置测试工具以使用 10 折交叉验证。
  3. 建立多个不同的模型,从花卉测量中预测物种
  4. 选择最佳模型。

5.1 创建验证数据集

我们需要知道我们创建的模型是好的。

稍后,我们将使用统计方法来估计我们在看不见的数据上创建的模型的准确性。我们还希望通过在实际未见数据上评估最佳模型对未见数据的准确性进行更具体的估计。

也就是说,我们将保留一些算法不会看到的数据,我们将使用这些数据来获得关于最佳模型实际上可能有多准确的第二个独立想法。

我们将加载的数据集分成两部分,其中 80% 将用于训练、评估和在模型中选择,20% 将作为验证数据集保留。

...
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)

您现在在X_trainY_train 中拥有用于准备模型的训练数据以及我们稍后可以使用的X_validationY_validation集。

请注意,我们使用 Python 切片来选择 NumPy 数组中的列。

5.2 测试线束

我们将使用分层 10 折交叉验证来估计模型准确性。

这会将我们的数据集分成 10 个部分,对 9 部分进行训练,对 1 部分进行测试,并对所有训练-测试分割组合重复。

分层意味着数据集的每次折叠或拆分都旨在使示例在整个训练数据集中的分布相同。

我们通过random_state参数将随机种子设置为固定数字,以确保在训练数据集的相同分割上评估每个算法。

我们正在使用“准确度”指标来评估模型。

这是正确预测的实例数除以数据集中的实例总数再乘以 100 的比率(例如,准确率为 95%)。我们将在 接下来运行构建和评估每个模型时使用评分变量。

5.3 构建模型

我们不知道哪种算法可以很好地解决这个问题或使用什么配置。

我们从图中得到一个想法,即某些类在某些维度上是部分线性可分的,因此我们期望得到总体上良好的结果。

让我们测试 6 种不同的算法:

  • 逻辑回归 (LR)
  • 线性判别分析 (LDA)
  • K-最近邻(KNN)。
  • 分类和回归树 (CART)。
  • 高斯朴素贝叶斯 (NB)。
  • 支持向量机 (SVM)。

这是简单线性(LR 和 LDA)、非线性(KNN、CART、NB 和 SVM)算法的良好混合。

让我们构建和评估我们的模型:

...
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
	kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)
	cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
	results.append(cv_results)
	names.append(name)
	print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))

5.4 选择最佳模型

我们现在有 6 个模型和每个模型的准确度估计。我们需要将模型相互比较并选择最准确的。

运行上面的例子,我们得到以下原始结果:

LR: 0.960897 (0.052113)
LDA: 0.973974 (0.040110)
KNN: 0.957191 (0.043263)
CART: 0.957191 (0.043263)
NB: 0.948858 (0.056322)
SVM: 0.983974 (0.032083)

注意:您的结果可能会因为算法或评估程序的随机性或数值精度的差异而有所不同。考虑多次运行该示例并比较平均结果。

你得了多少分?
在下面的评论中发布您的结果。

在这种情况下,我们可以看到支持向量机 (SVM) 的估计准确度得分最高,约为 0.98 或 98%。

我们还可以创建模型评估结果图,并比较每个模型的传播和平均准确度。每个算法都有一组准确度度量,因为每个算法都被评估了 10 次(通过 10 倍交叉验证)。

比较每个算法的结果样本的一种有用方法是为每个分布创建一个箱线图并比较这些分布。

...
# Compare Algorithms
pyplot.boxplot(results, labels=names)
pyplot.title('Algorithm Comparison')
pyplot.show()

我们可以看到盒须图在范围的顶部被压扁,许多评估达到了 100% 的准确度,有些则推到了 80% 的高准确度。

5.5 完整示例

作为参考,我们可以将之前的所有元素组合到一个脚本中。

下面列出了完整的示例。

# compare algorithms
from pandas import read_csv
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1, shuffle=True)
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
	kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)
	cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
	results.append(cv_results)
	names.append(name)
	print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))
# Compare Algorithms
pyplot.boxplot(results, labels=names)
pyplot.title('Algorithm Comparison')
pyplot.show()

 

6. 做出预测

我们必须选择一种算法来进行预测。

上一节的结果表明 SVM 可能是最准确的模型。我们将使用这个模型作为我们的最终模型。

现在我们想了解模型在验证集上的准确性。

这将使我们对最佳模型的准确性进行独立的最终检查。保留验证集很重要,以防万一您在训练过程中出现失误,例如过度拟合训练集或数据泄漏。这两个问题都会导致过于乐观的结果。

6.1 做出预测

我们可以在整个训练数据集上拟合模型并对验证数据集进行预测。

...
# Make predictions on validation dataset
model = SVC(gamma='auto')
model.fit(X_train, Y_train)
predictions = model.predict(X_validation)

6.2 评估预测

我们可以通过将预测与验证集中的预期结果进行比较来评估预测,然后计算分类准确率,以及混淆矩阵和分类报告。

....
# Evaluate predictions
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))

我们可以看到,在保留数据集上的准确率为 0.966 或约 96%。

混淆矩阵提供了所犯错误的指示。

最后,分类报告按精度、召回率、f1-score 和显示出色结果的支持(假设验证数据集很小)提供了每个类别的细分。

0.9666666666666667
[[11  0  0]
 [ 0 12  1]
 [ 0  0  6]]
                 precision    recall  f1-score   support

    Iris-setosa       1.00      1.00      1.00        11
Iris-versicolor       1.00      0.92      0.96        13
 Iris-virginica       0.86      1.00      0.92         6

       accuracy                           0.97        30
      macro avg       0.95      0.97      0.96        30
   weighted avg       0.97      0.97      0.97        30

6.3 完整示例

作为参考,我们可以将之前的所有元素组合到一个脚本中。

下面列出了完整的示例。

# make predictions
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# Split-out validation dataset
array = dataset.values
X = array[:,0:4]
y = array[:,4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)
# Make predictions on validation dataset
model = SVC(gamma='auto')
model.fit(X_train, Y_train)
predictions = model.predict(X_validation)
# Evaluate predictions
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))

可以用 Python 进行机器学习

完成上面的教程。最多需要 5 到 10 分钟!

无需了解所有内容。你的目标是端到端地完成教程并获得结果。您不需要在第一遍就了解所有内容。一边走一边列出你的问题。大量使用Python中的help(“FunctionName”)帮助语法来了解您正在使用的所有函数。

不需要知道算法是如何工作的。了解限制以及如何配置机器学习算法很重要。但是可以稍后学习算法。你需要在很长一段时间内慢慢积累这些算法知识。今天,首先要熟悉这个平台。

无需成为 Python 程序员。如果您不熟悉 Python 语言,它的语法可能很直观。就像其他语言一样,关注函数调用(例如function())和赋值(例如a = “b”)。这将使您大获全胜。您是一名开发人员,您知道如何快速掌握一门语言的基础知识。刚开始,稍后再深入了解细节。

无需成为机器学习专家。您可以稍后了解各种算法的优点和局限性,并且您可以稍后阅读大量帖子,以了解机器学习项目的步骤以及使用交叉验证评估准确性的重要性。

机器学习项目中的其他步骤呢?我们没有涵盖机器学习项目中的所有步骤,因为这是您的第一个项目,我们需要关注关键步骤。即加载数据,查看数据,评估一些算法并进行一些预测。在后面的教程中,我们可以查看其他数据准备和结果改进任务。

概括

在本文中,您逐步了解了如何使用 Python 完成您的第一个机器学习项目。

您发现完成从加载数据到进行预测的小型端到端项目是熟悉新平台的最佳方式。

你的下一步

你完成了教程吗?

  1. 完成上述教程。
  2. 列出你的任何问题。
  3. 搜索或研究答案。
  4. 请记住,可以使用Python 中的help(“FunctionName”)来获取任何函数的帮助。

你有问题吗?
请写在下方的评论区,一起讨论。

  • 22
    点赞
  • 244
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
当你初学Python时,可能会感到有些困惑和不知所措,不知道如何入门。在这篇文章,我们将介绍一些Python小白必看的内容,帮助你快速入门。 1. 安装Python 首先,你需要安装Python。你可以在Python官方网站上下载最新版本的Python。安装过程很简单,只需按照提示进行操作即可。 2. 学习Python基础知识 了解Python的基础知识是入门的第一步。Python是一种高级编程语言,它简单易学,但功能强大。在学习Python时,你需要掌握以下几个方面: - 变量和数据类型 - 控制流程语句(if/else语句,for/while循环) - 函数和模块 - 面向对象编程(类和对象) 3. 编写Python程序 学习Python基础知识之后,你需要开始编写Python程序。在编写程序时,你可以使用Python集成开发环境(IDE),如PyCharm、Spyder、IDLE等。这些IDE都提供了代码提示、调试和其他功能,可以帮助你更轻松地编写Python程序。 4. 学习Python标准库 Python标准库包含了许多有用的模块和函数,可以帮助你更轻松地开发Python应用。一些常用的标准库模块包括: - math:数学函数 - os:操作系统接口 - sys:Python解释器相关的变量和函数 - datetime:日期和时间处理 - random:生成随机数 5. 学习Python第三方库 Python第三方库是由其他人开发的Python模块和程序包,可以扩展Python的功能。一些常用的第三方库包括: - NumPy:用于科学计算的库 - Pandas:用于数据分析的库 - Matplotlib:用于绘制图表的库 - Flask:用于Web开发的库 - TensorFlow:用于机器学习和深度学习的库 6. 学习Python编程实践 最后,学习编程实践非常重要。你需要通过编写实际的Python程序来加深对Python的理解。你可以参考一些Python开源项目,如Django、Requests、Scrapy等,来学习如何编写高质量的Python代码。 总之,学习Python需要不断地练习和实践。希望这篇文章能帮助你快速入门Python,并成为一名Python程序员。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值