京公网安备 11010802034615号
经营许可证编号:京B2-20210330
教你用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)
输出:
[11]
其中,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.9732401115.74763374163.27610621114.73638965 120.80385422158.21988574236.08568105121.8150983299.56772822123.83758651204.7371141196.53399594154.17490936130.9162951783.3878227171.36605897137.99500384137.99500384189.5684526884.3990668 ]
结语
提一下常用的监督学习的python库
Scikit-Learn
Tensorflow
Pytorch
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
初中毕业想考证,先确认“我能不能报”,再比较证书价值。学历门槛不够的证书,宣传再多也与你无关;能报但对应不上岗位的证书, ...
2026-11-02市场岗确有一批报考不设专业限制的证书,但“不限专业”只解决能不能报,真正决定值不值的是三件事:对应市场岗哪条子路径、招聘 ...
2026-11-02“大学生必考证书有哪些”这个问题,本身就藏着一个需要先拆掉的假设:似乎存在一份人人适用的必考清单。实际上,除了少数与毕业 ...
2026-11-02“最好考的一级证书”这个问题,最容易踩的坑不是选错证书,而是没先弄清“一级”在目标证书体系里到底指什么。有的体系里,一级 ...
2026-11-02“职业证书哪个含金量高”这个问题,很难用一张榜单回答。原因不复杂:证书的“含金量”取决于你拿它做什么。想进入必须持证的行 ...
2026-11-02“证件含金量排名”是搜索量很高的词,但直接给你一份“十大证书排行榜”的文章,基本可以跳过。原因很简单:证书的含金量不是单 ...
2026-11-02在校大专生能考的证书,大体分三类:通用能力类(英语等级、计算机等级、普通话水平测试)、职业技能等级类,以及部分不要求工作 ...
2026-11-02在家闲着想考个证书,最容易踩的坑是先去搜“含金量排行榜”,然后被一堆培训广告牵着走。更稳妥的顺序是反过来的:先看自己属于 ...
2026-11-02“注册类证书”不是一个可以随手列全的清单,它更像一个制度口径:通常指国家职业资格目录中设有注册管理、与执业准入挂钩的资格 ...
2026-11-02“现在考什么证有用”很难有统一答案。同一张证书,对想进会计事务所的人有用,对想做新媒体运营的人可能帮助有限;对需要评职称 ...
2026-11-02“适合女生考的证书有哪些含金量高”,这个问题里藏着两个容易走偏的前提。一是把“女生”当成职业属性,仿佛有一份统一的女性证 ...
2026-11-02先说结论:工商管理专业女生不必追“女生必考”榜单。证书有没有用,取决于它能不能对上你准备投的岗位。比较稳妥的做法,是先在 ...
2026-11-02“什么证好考又实用”这个问题,最怕两种回答:一种是列一堆“通过率高”的证书,却不告诉你考完能干什么;另一种是反过来只谈含 ...
2026-11-02“女士可以考哪些证书”并没有一份统一答案。真正决定你能考什么的,不是性别,而是三件事:你现在的身份(在校、在职还是准备转 ...
2026-11-02大专学历想考运营岗位证书,先给结论:能报的证书不少,但值得考的集中在三类——平台官方运营/投放认证、职业技能等级评价、数 ...
2026-11-02大学生判断一张证书是否重要,不用先看宣传热度,而要看四件事:它是否匹配你的目标岗位,校招时是否真用得上,在校期间是否具备 ...
2026-11-02先把结论说清楚:在校期间以2—4张核心证书为宜,其中1—2张通用底证、1—2张与目标岗位对应的方向证;高壁垒资格证只在符合报考 ...
2026-11-02大学生问证书推荐,最容易掉进的坑是“别人考什么我也考什么”。证书本身没有统一的含金量排序,同一张证,对目标岗位是硬门槛, ...
2026-11-02经管毕业生没有一张“通吃”的证书。比较有用的选择,是先按财会、金融、市场、人力、综合管理几个方向锁定目标岗位,再把证书分 ...
2026-11-02“程序员考什么证书含金量高”,没有放之四海皆准的答案。同样是“高含金量”,对后端开发、云原生工程师、数据开发和安全工程师 ...
2026-11-02