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

今天,文摘菌想谈谈监督学习。

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

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

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

什么是监督学习?

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

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

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

  • f表示学生学习时间和考试成绩之间的关系

  • X表示输入(学习小时数)

  • Y表示输出(考试分数)

  • C表示随机误差

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

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

举两个例子

分类:判断是猫还是狗。

回归:房子的售价是多少?

分类

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

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

分类方法和选择最优方法

一些常见的分类算法:

  • K近邻

  • 决策树

  • 朴素贝叶斯

  • 支持向量机

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

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

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

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

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

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

pip install pandaspip install matplotlibpip install scikit-learn

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

from sklearn import datasetsimport pandas as pdimport matplotlib.pyplot as plt

# Loading IRIS dataset from scikit-learn object into iris variable.iris = datasets.load_iris()

# Prints the type/type object of irisprint(type(iris))# <class 'sklearn.datasets.base.Bunch'>

# prints the dictionary keys of iris dataprint(iris.keys())

# prints the type/type object of given attributesprint(type(iris.data), type(iris.target))

# prints the no of rows and columns in the datasetprint(iris.data.shape)

# prints the target set of the dataprint(iris.target_names)

# Load iris training datasetX = iris.data

# Load iris target setY = iris.target

# Convert datasets' type into dataframedf = pd.DataFrame(X, columns=iris.feature_names)

# Print the first five tuples of dataframe.print(df.head())

输出:

<class ‘sklearn.datasets.base.Bunch’>dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])]<class ‘numpy.ndarray’> <class ‘numpy.ndarray’>(150, 4)[‘setosa’ ‘versicolor’ ‘virginica’]sepal length (cm) sepal width (cm) petal length (cm) petal width  (cm)0   5.1   3.5   1.4  0.21   4.9   3.0   1.4  0.22   4.7   3.2   1.3  0.23   4.6   3.1   1.5  0.24   5.0   3.6   1.4  0.2

Sklearn中的K最近邻算法

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

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

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

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

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

from sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifier

# Load iris dataset from sklearniris = datasets.load_iris()

# Declare an of the KNN classifier class with the value with neighbors.knn = KNeighborsClassifier(n_neighbors=6)

# Fit the model with training data and target valuesknn.fit(iris['data'], iris['target'])

# Provide data whose class labels are to be predictedX = [    [5.9, 1.0, 5.1, 1.8],    [3.4, 2.0, 1.1, 4.8],]

# Prints the data providedprint(X)

# Store predicted class labels of Xprediction = knn.predict(X)

# Prints the predicted class labels of Xprint(prediction)

输出:

[1 1]

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

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

回归

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

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

回归模型

一些常见的回归模型有

  • 线性回归

  • 逻辑回归

  • 多项式回归

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

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

  • βo是截距

  • β1是斜率

  • e是误差项

用图表示,即

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

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

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

图形表示为

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

解决线性回归问题

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

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

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

用Sklearn实现线性回归

from sklearn import datasets, linear_modelimport matplotlib.pyplot as pltimport numpy as np

# Load the diabetes datasetdiabetes = datasets.load_diabetes()

# Use only one feature for trainingdiabetes_X = diabetes.data[:, np.newaxis, 2]

# Split the data into training/testing setsdiabetes_X_train = diabetes_X[:-20]diabetes_X_test = diabetes_X[-20:]

# Split the targets into training/testing setsdiabetes_y_train = diabetes.target[:-20]diabetes_y_test = diabetes.target[-20:]

# Create linear regression objectregr = linear_model.LinearRegression()

# Train the model using the training setsregr.fit(diabetes_X_train, diabetes_y_train)

# Input dataprint('Input Values')print(diabetes_X_test)

# Make predictions using the testing setdiabetes_y_pred = regr.predict(diabetes_X_test)

# Predicted Dataprint("Predicted Output Values")print(diabetes_y_pred)

# Plot outputsplt.scatter(diabetes_X_test, diabetes_y_test, color='black')plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1)

plt.show()

输入

输入值:

[  [ 0.07786339]  [-0.03961813]  [ 0.01103904]  [-0.04069594]    [-0.03422907]  [ 0.00564998]  [ 0.08864151]  [-0.03315126]   [-0.05686312]  [-0.03099563]  [ 0.05522933]  [-0.06009656]  [ 0.00133873]  [-0.02345095]  [-0.07410811]  [ 0.01966154]  [-0.01590626]  [-0.01590626]  [ 0.03906215]  [-0.0730303 ]  ]

预测的输出值:

[  225.9732401   115.74763374  163.27610621  114.73638965    120.80385422  158.21988574  236.08568105  121.81509832  99.56772822   123.83758651  204.73711411   96.53399594  154.17490936  130.91629517   83.3878227   171.36605897 137.99500384  137.99500384  189.56845268   84.3990668  ]

结语

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

  • Scikit-Learn

  • Tensorflow

  • Pytorch

最后布置一个作业:请根据文章内容,用监督学习推测一下今天的文摘菌是哪位帅哥小编~

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

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

  1. python怎么做彩票概率_小白学数据小抄放送 Python,R,大数据,机器学习

    原标题:小白学数据小抄放送 Python,R,大数据,机器学习 大数据文摘作品,转载要求见文末 作者 | Elaine,田桂英,Aileen 导读:前段时间小白学数据专栏出了一期Python小抄表,后 ...

  2. python编程例子 输入 输出-推荐 :手把手教你用Python创建简单的神经网络(附代码)...

    原标题:推荐 :手把手教你用Python创建简单的神经网络(附代码) 作者:Michael J.Garbade:翻译:陈之炎:校对:丁楠雅 本文共2000字,9分钟. 本文将为你演示如何创建一个神经网 ...

  3. 小白学数据 | 28张小抄表大放送:Python,R,大数据,机器学习

    1. Python的数据科学快速入门指南 如果你刚入门Python,那么这张小抄表非常适合你.查看这份小抄表,你将获得循序渐进学习Python的指导.它提供了Python学习的必备包和一些有用的学习技 ...

  4. 小白学数据_|_28张小抄表大放送:Python,R,大数据,机器学习

    1. Python的数据科学快速入门指南 如果你刚入门Python,那么这张小抄表非常适合你.查看这份小抄表,你将获得循序渐进学习Python的指导.它提供了Python学习的必备包和一些有用的学习技 ...

  5. 【小白学PyTorch】15.TF2实现一个简单的服装分类任务

    <<小白学PyTorch>> 小白学PyTorch | 14 tensorboardX可视化教程 小白学PyTorch | 13 EfficientNet详解及PyTorch实 ...

  6. python对excel数据统计_用 python实现简单EXCEL数据统计

    原博文 2016-11-24 23:06 − 任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlr ...

  7. 基于python的简单KNN算法(K- Nearest Neighbor)的实现与改进

    最近在自学python的数据分析,还想稍微蹭一蹭深度学习,于是不可避免地接触到了最简单的机器学习算法--KNN算法.该方法的思路非常简单直观:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近) ...

  8. 真小白|一步步教你用Python抓取微信好友分析

    前言 前段时间公司里有个同事发了张图片在群上,是他所有微信好友头像拼成的一张大图,我看着挺有意思,就想自己也搞一下,然后百度了下怎么抓取微信好友之类的--一搜全是用Python抓取的,之前就听说过Py ...

  9. 小白学数据 | 除了计算大姨妈周期,时间序列分析还有什么用

    "--- 据说最贴心的男票是会记录下女票每一次大姨妈来的时间,然后绘制成一张月份折线图以监测女票的身体健康(以避开无法啪啪啪的时间).你知不知道,这张图其实就是一个时间序列图,你看图预测未来 ...

最新文章

  1. 第一次软件工程作业(改进版)
  2. 基于visual Studio2013解决面试题之0804复杂链表
  3. 实现基于Spring框架应用的权限控制系统(转)
  4. 如何对比_潭酒红潭酱酒对比红花郎怎么样口感如何
  5. 计算c53的c语言的程序,C程序设计的常用算法.doc
  6. matplotlib绘图入门详解
  7. 苹果怎么换行打字_停课不停学!推荐苹果电脑学习类软件,丰富您的假期生活...
  8. C和C++中include 搜索路径的一般形式以及gcc搜索头文件的路径
  9. mysql 如果存在修改_mysql如存在并发修改可能,一定要注意保证数据一致性
  10. AIM Tech Round 4 (Div. 2)
  11. Tomcat如何配置整个磁盘的映射呢?
  12. 第十二章、LNMP架构(中)
  13. Azure 托管镜像和非托管镜像对比
  14. python爬取网页题库_用Python爬取本站离线题库
  15. win11怎么开启休眠睡眠?
  16. Leetcode--打劫家舍
  17. uefi和legacy的区别是什么
  18. git clone no matching host key type found. Their offer: ssh-rsa,ssh-dss... 报错
  19. 独家 | 利用深度学习来预测Spotify上的Hip-Hop 流行程度
  20. python【数据结构与算法】流水线作业调度Johnson启发式算法

热门文章

  1. [JavaWeb-Servlet]概述与快速入门
  2. [蓝桥杯2018决赛]换零钞-枚举
  3. 内存超频trfc_这只是开始?四款DDR4内存超频效果对比
  4. laravel 模板继承_Laravel框架模板之公共模板、继承、包含实现方法分析
  5. 散列查找 散列表(哈希表)
  6. 进程调度算法 C++实现
  7. C++ 从文件夹中读取文件
  8. Libre OJ 「BalticOI 2013」非回文数 数位dp
  9. Codeforces Round #709 (Div. 1) C. Skyline Photo dp + 单调栈优化
  10. CF 1475 F . Unusual Matrix 思维