ximingri 2018-06-11
学习是最难掌握的,但如果不学习,你我永远无法成长。多年来,作者尝试了不同的东西,并且发现只有通过实践才能更好的学习,而不只是通过阅读。无论何时,当作者尝试构建一些东西(在本例中是机器学习模型)时,会遇到错误或陷入现实世界中可能发生的"陷阱"。毕竟,理想中的世界是不存在的。所以为了帮助大家了解机器学习模型,作者将建立一个机器学习模型来预测信用卡诈骗。
最近作者在Udemy上学习了关于机器学习的相关课程。如果你刚刚涉猎这个领域,你可以去看看。作者认为他们的教学方式很独特。通过他们,学到了一些基本的机器学习模型。本文将放出亲自操作的步骤,让大家有更加直观的感受。这里将使用Kaggle数据集,下载地址:(https://www.kaggle.com/mlg-ulb/creditcardfraud/data)。他还下载了Anaconda以便加载该模型的所有相关包(https://www.anaconda.com/download/)。也将在本文中使用Anaconda附带的SpyderIDE。
当然,首先是创建一个python文件,并将其放在与DataSet相同的目录中。
现在第一个问题是,你如何建立一个机器学习模型?让我们回忆一下我们要干什么。我们是要建立一个机器学习模型来预防信用卡诈骗,其中诈骗是(1)安全是(0)。因此,很明显,这是一个分类问题,有太多的模型可供选择。但是让我们看一下数据,我们会注意到,这里有很多数据,大约二十九个不同的自变量和超过二十万的观测量。所以我们必须排除昂贵的计算模型。接下来,我们看到变量没有标签,很难知道它们是否相关。这加大了我们选择模型的难度,因为有些方法需要所有变量都是完全独立的。作者个人认为我们可以考虑使用逻辑回归进行分类,因为它可以很容易地处理大量的数据,并能很好地处理非线性数据。
在此之前,让我们先看看逻辑回归是如何工作的:在逻辑回归中,我们创建了一个逻辑曲线,其上界为1,下界为0。这条曲线的X轴是自变量,我们用这条曲线得到一个在0-1之间发生的自变量的概率值。如果这个值大于0.5,我们可以说它比0更有可能成为1,所以它被归类为1,反之亦然。你可以看看下面的图片。
现在,没有相关的库,你就不能真正建立一个模型。但也不是不可以,只不过这无疑会增加难度。所以,让我们使用import pandas吧,它可以处理数据的输入和分割。
接下来,我们将使用pandas导入数据,我们还将在DataSet上使用"iloc[].value"命令来提取X和y变量。用于此的代码如下所示:
确保.csv文件名正确! ":"的意思为在X矩阵中都遵循以下要求。另外,pandas应该导入所有行和所有列,除了最后一个列,因为最后一列是因变量。对y来说,pandas应该输入所有行,但代码中只有30行而不是31行的原因是Pyton从0开始而不是从1开始。作者第一次尝试的时候,花了五分钟才弄清这个原因。
下一步是将数据集拆分为训练集和测试集。这可以使用"skLearning"库中的一个函数来完成,这个函数名为"TRANTEST_Split"。我们需要将超过20万的数据集80%用于训练,20%用于测试。我们现在要做的就是创建X_TRAN、Y_TRAN、X_TEST和Y_TEST,并给它们赋值,这些值可以使用下面的行来完成:
让我们再次打开数据集,似乎大部分数据已经被缩放了,所以我们不需要再进行缩放,除非处理的信用卡金额还未缩放。你可以缩放数据,但确保缩放数据的范围不会影响整个结果。我们可以使用"skLearning"库中的"StandardScaler"类来扩展数据。我们所做的就是调用StandardScaler函数并让数据标准化。你可以使用下面的代码来完成它。
现在,我们已经对数据进行了处理,并创建了一个逻辑回归函数。你可以利用它对诈骗数据进行分类。下面是具体的代码。我们首先从"sklearn"中引进"逻辑回归"。然后,我们创建并将其命名为"classifier",然后将其与X_TRAN和y_TRANS数据(如下所示)相匹配:
现在我们可以训练我们的模型了,我们首先得测试它。这可以通过使用X_test值创建y_pred向量来实现。相关代码如下所示:
恭喜!你已经创建了你的第一个机器学习模型。现在让我们来看看模型的准确性。我们将创建一个混淆矩阵来策略模型的准确性。首先,我们从"skLearning"导入"confusion_matrix",并使用以下代码创建基于y_pred和y_test的混淆矩阵:
现在,我们只需在混淆矩阵中添加对应错误分类的部分,除以总数,再乘以100并且打印它。你可以使用下面的代码来完成这项步骤:
现在,让我们运行代码,看看这个模型是否好用,运行代码给出以下结果:
这对于一个简单的机器学习模型来说真的很好了,但是它还是有些问题。我们需要转到SpyderIDE中的变量资源管理器进行调整,你可以在下面的图片中找到它:
从这里我们将打开"cm"变量,这是我们的混淆矩阵并得到以下结果:
[0,0]部分对应于安全交易,从数据中看,我们做得很好。[0,1]是我们系统没有捕捉到的诈骗交易,有九个。[1,0]部分是我们把安全交易归为诈骗交易的数量,有37例。考虑到真正的交易数量,这是一个相当不错的数字了。最后,[1,1]部分对应于正确区分出的诈骗交易的数量,我们在这一节中得到了64,这也是相当不错的。总的来说,这是一个相当好和相当快的预测信用卡诈骗交易的模型,因为99%的交易被正确分类,87%的诈骗交易被"找见"。不过,我们还需要在其他数据集中测试它,以确定分类器是否有普适性,还是只适合这个数据集。
所以,我们刚刚建立了一个很好的模型,感觉很好,对吧?在现实生活中,我们需要解决一些小问题,比如选择正确的模型,以及如何评估你的模型,只有通过制作模型和发现它们的缺陷,你才能做得更好。这就是创造的魅力。通过这次操作,告诉了我们建立一个机器学习模型并不难。还有,所有基本的分类模型都遵循相同的结构,因此你可以继续将其用于其他项目。
所以基本上:
你可以构建一个机器学习模型,即使你不知道大多数变量。
建立机器学习模型很容易,但选择正确的机器学习模型则需要真正的能力。
正确评估你的模型是必要的,你可以通过混淆矩阵来完成。