首页 首页 大数据 查看内容

小白学数据:教你用Python实现简单监督学习算法

木马童年 2019-4-30 16:45 38 0

监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近日,监督学习也依旧是入门机器学习的钥匙。 这篇监督学习教程适用于刚入门机器学习的小白。 当然了,如 ...

小白学数据:教你用Python实现简单监督学习算法

监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近日,监督学习也依旧是入门机器学习的钥匙。

这篇监督学习教程适用于刚入门机器学习的小白。

当然了,如果你已经熟练掌握监督学习,也不妨快速浏览这篇教程,检验一下自己的理解程度。

一、什么是监督学习?

在监督学习中,我们首先导入包含有训练属性和目标属性的数据集。监督学习算法会从数据集中学习得出训练样本和其目标变量之间的关系,然后将学习到的关系对新样本(未被标记的样本)进行分类。

为了阐明监督学习的工作原理,我们用根据学生学习时间预测其考试成绩的例子来说明。

用数学表示,即Y = f(X)+ C,其中

  • f表示学生学习时间和考试成绩之间的关系
  • X表示输入(学习小时数)
  • Y表示输出(考试分数)
  • C表示随机误差

监督学习算法的终极目标是给出新的输入X,使得预测结果Y的准确率最大。有很多方法可以实现有监督学习,我们将探讨几种最常用的方法。

根据给定的数据集,机器学习可以分为两大类:分类(Classification)和回归(Regression)。如果给定的数据集的输出值是类别,那么待解决是分类问题。如果给定的数据集的输出值是连续的,那么该问题是回归问题。

举两个例子

  • 分类:判断是猫还是狗。
  • 回归:房子的售价是多少?

二、分类

考虑这样一个例子,医学研究员想要分析乳腺癌数据,用于预测患者使用三种治疗方案中的哪一种。该数据分析问题就属于分类问题,通过建立分类模型来预测类别标签,例如“治疗方案A”、“治疗方案B”或者“治疗方案C”。

分类是一个预测类别标签的预测问题,这些类别标签都是离散和无序的。分类包含两个步骤:学习步骤和分类步骤。

1. 分类方法和选择最优方法

一些常见的分类算法:

  • K近邻
  • 决策树
  • 朴素贝叶斯
  • 支持向量机

在学习步骤中,分类模型通过分析训练集数据建立一个分类器。在分类步骤中,分类器对给定的数据进行分类。用于分析的数据集(包含数据和其对应的标签)被划分为训练集和测试集。训练集从分析用的数据集中随机抽取。剩下的数据集构成测试集。测试集和训练集相互独立,即测试集中的数据不会被构建于分类器。

测试集用于评价分类器的预测精度。分类器的精度用测试集中预测正确的百分比表示。为了获得更高的精度,最好的方法是测试多个不同的算法,同时,对每个算法尝试不同的参数。可以通过交互检验选择最好的算法和参数。

对于给定问题,在选取算法时,算法的精度、训练时间、线性、参数数目以及特殊情况都要考虑在内。

在IRIS数据集上实现sklearn中的KNN,并对给定的输入进行花卉类型分类。

首先,要应用机器学习算法,我们需要了解给定数据集的组成。在这个例子中,我们使用内置在sklearn包中的IRIS数据集。现在让我们使用代码查看IRIS数据集。

请确保你的电脑上成功安装了Python。然后,通过PIP安装下面这些python库:

  1. pip install pandas
  2. pip install matplotlib
  3. pip install scikit-learn

在下面这段代码中,我们使用pandas中的一些方法查看IRIS数据集的一些属性。

  1. from sklearn import datasets
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. # Loading IRIS dataset from scikit-learn object into iris variable.
  5. iris = datasets.load_iris()
  6. # Prints the type/type object of iris
  7. print(type(iris))
  8. #
  9. # prints the dictionary keys of iris data
  10. print(iris.keys())
  11. # prints the type/type object of given attributes
  12. print(type(iris.data), type(iris.target))
  13. # prints the no of rows and columns in the dataset
  14. print(iris.data.shape)
  15. # prints the target set of the data
  16. print(iris.target_names)
  17. # Load iris training dataset
  18. X = iris.data
  19. # Load iris target set
  20. Y = iris.target
  21. # Convert datasets' type into dataframe
  22. df = pd.DataFrame(X, columns=iris.feature_names)
  23. # Print the first five tuples of dataframe.
  24. print(df.head())

2. 输出:

  1. dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])]
  2. (150, 4)
  3. [‘setosa’ ‘versicolor’ ‘virginica’]
  4. sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
  5. 0 5.1 3.5 1.4 0.2
  6. 1 4.9 3.0 1.4 0.2
  7. 2 4.7 3.2 1.3 0.2
  8. 3 4.6 3.1 1.5 0.2
  9. 4 5.0 3.6 1.4 0.2

三、Sklearn中的K最近邻算法

如果一个算法仅存储训练集数据,并等待测试集数据的给出,那么这个算法便可认为是一个“懒惰学习法”。直到给定测试集数据,它才会根据它与存储的训练集样本的相似性来对新样本进行分类。

K近邻分类器就是一个懒惰学习法。

K近邻基于类比学习,比较一个测试样本和与之相似训练集数据。训练集有n个属性表征。每个样本由n维空间中的一个点表示。这样,训练集中的所有样本都储存在n维模式空间中。当给定一个未知的样本,K近邻分类器在模式空间中搜寻和未知样本最接近的k个训练样本。这k个训练样本就是未知样本的k个近邻。

“接近度”用距离来度量,例如欧几里得距离。较好的K值可以通过实验确定。

在下面这段代码中,我们导入KNN分类器,将之应用到我们的输入数据中,然后对花卉进行分类。

  1. from sklearn import datasets
  2. from sklearn.neighbors import KNeighborsClassifier
  3. # Load iris dataset from sklearn
  4. iris = datasets.load_iris()
  5. # Declare an of the KNN classifier class with the value with neighbors.
  6. knn = KNeighborsClassifier(n_neighbors=6)
  7. # Fit the model with training data and target values
  8. knn.fit(iris['data'], iris['target'])
  9. # Provide data whose class labels are to be predicted
  10. X = [
  11. [5.9, 1.0, 5.1, 1.8],
  12. [3.4, 2.0, 1.1, 4.8],
  13. ]
  14. # Prints the data provided
  15. print(X)
  16. # Store predicted class labels of X
  17. prediction = knn.predict(X)
  18. # Prints the predicted class labels of X
  19. print(prediction)

输出:

  1. [1 1]

其中,0,1,2分别代表不同的花。在该例子中,对于给定的输入,KNN分类器将它们都预测成为1这个类别的花。

小白学数据:教你用Python实现简单监督学习算法

KNN对IRIS数据集分类的直观可视化

四、回归

回归通常被定义为确定两个或多个变量之间的相关关系。例如,你要通过给定的数据X预测一个人的收入。这里,目标变量是指该变量是我们关心以及想要预测的未知变量,而连续是指Y的取值没有间隔。

预测收入是一个经典的回归问题。你的输入应当包含所有与收入相关的个人信息(比如特征),这些信息可以预测收入,例如工作时长、教育经历、职称以及他的曾住地等。

1. 回归模型

一些常见的回归模型有

  • 线性回归
  • 逻辑回归
  • 多项式回归

线性回归通过拟合一条直线(回归线)来建立因变量(Y)与一个或多个自变量(X)之间关系。

用数学公示表示,即h(xi) = βo + β1 * xi + e,其中

  • βo是截距
  • β1是斜率
  • e是误差项

用图表示,即

小白学数据:教你用Python实现简单监督学习算法

逻辑回归是一种预测类别的算法,用于找出特征和特定输出概率之间关系。

当然了,我们也可以把逻辑回归归类为分类算法,但就像我们刚才所说,逻辑回归的输出其实是目标对象属于某一类别的概率。既然概率是连续的,我们依旧把逻辑回归算作回归算法。

用数学公式表示:p(X) = βo + β1 * X,其中p(x) = p(y = 1 | x)

图形表示为:

小白学数据:教你用Python实现简单监督学习算法

多项式回归是一种将自变量x与因变量y的关系拟合为x的n阶多项式的回归算法。

2. 解决线性回归问题

我们有数据集X,以及对应的目标值Y,我们使用普通最小二乘法通过最小化预测误差来拟合线性模型

给定的数据集同样划分为训练集和测试集。训练集由已知标签的样本组成,因此算法能够通过这些已知标签的样本来学习。测试集样本不包含标签,你并不知道你试图预测样本的标签值。

我们将选择一个需要训练的特征,应用线性回归方法拟合训练数据,然后预测测试集的输出。

3. 用Sklearn实现线性回归

  1. from sklearn import datasets, linear_model
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. # Load the diabetes dataset
  5. diabetes = datasets.load_diabetes()
  6. # Use only one feature for training
  7. diabetesdiabetes_X = diabetes.data[:, np.newaxis, 2]
  8. # Split the data into training/testing sets
  9. diabetes_Xdiabetes_X_train = diabetes_X[:-20]
  10. diabetes_Xdiabetes_X_test = diabetes_X[-20:]
  11. # Split the targets into training/testing sets
  12. diabetesdiabetes_y_train = diabetes.target[:-20]
  13. diabetesdiabetes_y_test = diabetes.target[-20:]
  14. # Create linear regression object
  15. regr = linear_model.LinearRegression()
  16. # Train the model using the training sets
  17. regr.fit(diabetes_X_train, diabetes_y_train)
  18. # Input data
  19. print('Input Values')
  20. print(diabetes_X_test)
  21. # Make predictions using the testing set
  22. diabetes_y_pred = regr.predict(diabetes_X_test)
  23. # Predicted Data
  24. print("Predicted Output Values")
  25. print(diabetes_y_pred)
  26. # Plot outputs
  27. plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
  28. plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1)
  29. plt.show()

4. 输入

输入值:

  1. [
  2. [ 0.07786339] [-0.03961813] [ 0.01103904] [-0.04069594]
  3. [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126]
  4. [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656]
  5. [ 0.00133873] [-0.02345095] [-0.07410811] [ 0.01966154]
  6. [-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ]
  7. ]

预测的输出值:

  1. [
  2. 225.9732401 115.74763374 163.27610621 114.73638965
  3. 120.80385422 158.21988574 236.08568105 121.81509832
  4. 99.56772822 123.83758651 204.73711411 96.53399594
  5. 154.17490936 130.91629517 83.3878227 171.36605897
  6. 137.99500384 137.99500384 189.56845268 84.3990668
  7. ]

小白学数据:教你用Python实现简单监督学习算法

五、结语

提一下常用的监督学习的python库

  • Scikit-Learn
  • Tensorflow
  • Pytorch

原文链接:https://towardsdatascience.com/supervised-learning-with-python-cf2c1ae543c1

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

机器学习 数据挖掘 数据集 数据分析 决策树 回归模型
0
为您推荐
大数据技术改变城市的运作方式,智慧城市呼之欲出

大数据技术改变城市的运作方式,智慧城市呼

纽奥良虽像大多数城市一样有火灾侦测器安装计划,但直到最近还是要由市民主动申装。纽…...

大数据分析面临生死边缘,未来之路怎么走?

大数据分析面临生死边缘,未来之路怎么走?

大数据分析开始朝着营销落地,尤其像数果智能这类服务于企业的大数据分析供应商,不仅…...

什么是工业大数据,要通过3B和3C来理解?

什么是工业大数据,要通过3B和3C来理解?

核心提示:工业视角的转变如果说前三次工业革命分别从机械化、规模化、标准化、和自动…...

大数据普及为什么说肥了芯片厂商?

大数据普及为什么说肥了芯片厂商?

科技界默默无闻的存在,芯片行业年规模增长到了3520亿美元。半导体给无人驾驶汽车带来…...

大数据技术有哪些,为什么说云计算能力是大数据的根本!

大数据技术有哪些,为什么说云计算能力是大

历史规律告诉我们,任何一次大型技术革命,早期人们总是高估它的影响,会有一轮一轮的…...

个人征信牌照推迟落地,大数据 重新定义个人信用!!

个人征信牌照推迟落地,大数据 重新定义个

为金融学的基础正日益坚实。通过互联网大数据精准记录海量个人行为,进而形成分析结论…...