python 分类变量回归_极简Python带你探索分类与回归的奥秘

为何使用人工智能和机器学习?

地球的未来在于人工智能和机器学习。如果对这些技术一无所知,人们很快会发现自己落伍了。世界发展日新月异,每天都发生着不可思议的变化。在人工智能和机器学习中,有许多实现和技术能够解决实时问题。其中,监督学习是最常用的方法之一。「人工智能的关键在于表示。」——Jeff Hawkins

什么是监督学习?

在监督学习中,我们首先导入包含训练属性和目标属性的数据集。监督学习算法将学习训练样本和其目标变量之间的关系,然后应用习得的关系对无目标属性的全新输入进行预测。

为了阐明监督学习如何工作,让我们考虑一个案例:根据学生的学习时长预测学生的成绩。

数学公式如下:

Y = f(X)+ C

其中,F 代表学生准备考试的时长与考试分数之间的关系。X 是输入(学习时长),Y 是输出(学生在考试中的得分),C 代表随机误差。

监督学习算法的最终目标是:给定新输入 X 时以最大的准确率预测 Y 的值。有几种方法都可以实现监督学习,我们将探索其中一些最常用的方法。

基于给定的数据集,机器学习问题将分为两类:分类和回归。如果给定数据同时具有输入(训练)值和输出标签,那么它属于分类问题。如果数据集有着连续数值属性而没有任何目标标签,那么它属于回归问题。Classification: Has the output label. Is it a Cat or Dog?

Regression: How much will the house sell for?

分类问题

让我们来举例说明。一名医学研究者希望通过分析乳腺癌数据来预测患者应该接受三种治疗方式中的哪一种。这个数据分析任务属于分类,其中构建的模型或分类器需要预测类别的标签,比如「疗法 1」、「疗法 2」、「疗法 3」。

分类问题预测离散且无序的类别标签。这个过程分两个阶段:学习阶段、分类阶段。

分类方法以及如何选择最合适的方法

最常用的算法包括:

1. K 近邻

2. 决策树

3. 朴素贝叶斯

4. 支持向量机

在学习阶段,分类模型通过分析训练集来构建分类器。在分类阶段,模型会预测出给定数据的类别标签。被分析的数据集元组及其相关类别标签被分隔成训练集和测试集。我们从要分析的数据集中随机抽取部分元组构成训练集。剩下的数据自然就是测试集了,且二者相互独立,也就是说测试集不参与训练过程。

测试集用于评估分类器的预测准确率。分类器的准确率指分类器在测试集中作出正确预测的百分比。为了达到更高的准确率,最好的方法是测试不同的算法并针对每一种算法进行调参。最后通过交叉验证可以找出最佳分类器。

为了给任务选择一个好的算法,我们必须考虑不同算法的准确率、训练时间、线性度、参数数量及特殊情况。

下面我们将运用 Scikit-Learn 在 IRIS 数据集上实现 KNN 算法,并根据给定输入预测花的种类。

首先,我们需要深入理解、探索给定数据集,这样才能应用机器学习算法。在本例中,我们使用了从 scikit-learn 导入的 IRIS 数据集。接下来我们边看代码边分析数据集。

请确保你的电脑上已经安装了 Python。然后,请使用 PIP 安装如下程序包:pip install pandas

pip install matplotlib

pip install scikit-learn

在下面的代码片段中,我们调用几个 Pandas 中的方法来了解 IRIS 数据集的属性。from sklearn import datasets

import pandas as pd

import matplotlib.pyplot as plt

# Loading IRIS dataset from scikit-learn object into iris variable.

iris = datasets.load_iris()

# Prints the type/type object of iris

print(type(iris))

#

# prints the dictionary keys of iris data

print(iris.keys())

# prints the type/type object of given attributes

print(type(iris.data), type(iris.target))

# prints the no of rows and columns in the dataset

print(iris.data.shape)

# prints the target set of the data

print(iris.target_names)

# Load iris training dataset

X = iris.data

# Load iris target set

Y = iris.target

# Convert datasets' type into dataframe

df = pd.DataFrame(X, columns=iris.feature_names)

# Print the first five tuples of dataframe.

print(df.head())

输出:

dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])]

(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.2

1 4.9 3.0 1.4 0.2

2 4.7 3.2 1.3 0.2

3 4.6 3.1 1.5 0.2

4 5.0 3.6 1.4 0.2

scikit-learn 中 的 K 近邻算法

如果一个算法只保存训练集的元组,待收到测试元组后再进行处理,那么它就是懒惰学习算法(Lazy Learner )。该算法只有收到测试数据时才执行泛化,基于测试数据与已保存的训练数据的相似性进行分类。

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

KNN 基于类比学习。所谓类比学习,就是通过比较给定的测试元组和与其相似的训练元组来学习。训练元组由 n 个属性来描述。每一个元组表示 n 维空间中的一个点。如此一来,所有的训练元组都保存在 n 维模式空间中。当输入未知元组时,k 近邻分类器在模式空间中搜索最接近未知元组的 k 个训练元组。这 k 个训练元组就是未知元组的 k 个「最近邻」。

「亲密度」由距离度量定义,例如欧式距离。合适的 K 值根据实验而定。

在下面的代码片段中,我们从 sklearn 中导入 KNN 分类器,将其用于我们的输入数据,之后用于对花进行分类。from sklearn import datasets

from sklearn.neighbors import KNeighborsClassifier

# Load iris dataset from sklearn

iris = 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 values

knn.fit(iris['data'], iris['target'])

# Provide data whose class labels are to be predicted

X = [

[5.9, 1.0, 5.1, 1.8],

[3.4, 2.0, 1.1, 4.8],

]

# Prints the data provided

print(X)

# Store predicted class labels of X

prediction = knn.predict(X)

# Prints the predicted class labels of X

print(prediction)

输出:[1 1]

这里,0 对应 Versicolor(杂色鸢尾)、1 对应 Virginica(维吉尼亚鸢尾)、2 对应 Setosa(山鸢尾)。基于给定输入,使用 KNN 分类器,两张图中的花都被预测为 Versicolor。

用于 IRIS 数据集分类的 KNN 算法直观图

回归

我们通常将确定两个或多个变量之间关系的过程叫做回归。例如,通过给定的输入数据 X 来预测某人的收入。

这里的目标变量是我们要预测的未知变量,连续性指的是 Y 值之间不存在间隙(间断)。

预测收入是一个经典的回归问题。你的输入数据应包括所有可用于预测收入的信息(也叫特征),例如工作时长、教育程度、职位、住所等。

回归模型

最常用的回归模型如下:线性回归

Logistic 回归

多项式回归

线性回归使用最佳拟合直线(即回归线)在因变量 Y 和一或多个自变量 X 之间建立关联。

数学公式如下:h(xi) = βo + β1 * xi + e

其中 βo 代表截距,β1 代表回归线的斜率,e 是误差项。

图形表示如下:

Logistic 回归算法应用在因变量属于某一类别的情况。Logistic 回归的思想是找出特征与特定输出概率之间的关系。

数学公式如下:p(X) = βo + β1 * X

其中,p(x) = p(y = 1 | x)。该函数的图形表示如下:

多项式回归是回归分析的一种形式。以 x 的 n 次多项式形式对自变量 x 和因变量 y 之间的关系进行建模。

解决线性回归问题

对于数据集 X 及对应的目标值 Y,我们使用普通最小二乘法训练一个线性模型。通过这个模型,我们可以以尽可能小的误差来预测给定未知输入 x 的输出值 y。

给定数据被分隔成训练集和测试集。训练集是有标注的(已加载特征值),因此该算法可以从这些标注样本中学习。测试集没有标注,即你不知道要预测的值。

我们以要训练的一个特征为例,运用线性回归拟合训练集,然后使用测试集进行预测。

在 scikit-learn 中实现线性回归from sklearn import datasets, linear_model

import matplotlib.pyplot as plt

import numpy as np

# Load the diabetes dataset

diabetes = datasets.load_diabetes()

# Use only one feature for training

diabetes_X = diabetes.data[:, np.newaxis, 2]

# Split the data into training/testing sets

diabetes_X_train = diabetes_X[:-20]

diabetes_X_test = diabetes_X[-20:]

# Split the targets into training/testing sets

diabetes_y_train = diabetes.target[:-20]

diabetes_y_test = diabetes.target[-20:]

# Create linear regression object

regr = linear_model.LinearRegression()

# Train the model using the training sets

regr.fit(diabetes_X_train, diabetes_y_train)

# Input data

print('Input Values')

print(diabetes_X_test)

# Make predictions using the testing set

diabetes_y_pred = regr.predict(diabetes_X_test)

# Predicted Data

print("Predicted Output Values")

print(diabetes_y_pred)

# Plot outputs

plt.scatter(diabetes_X_test, diabetes_y_test, color='black')

plt.plot(diabetes_X_test, diabetes_y_pred, color='red', linewidth=1)

plt.show()

输出:Input Values

[

[ 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 ]

]

Predicted Output Values

[

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

]

undefined

Graph between (diabetes_X_test, diabetes_y_pred) predictions will be continuous on the line equation.

(diabetes_X_test, diabetes_y_pred) 预测图是线性且连续的。

(diabetes_X_test, diabetes_y_pred) 预测图是线性且连续的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fast Matrix Factorization for Online Recommendation with Implicit Feedback论文代码分析

1 数据结构 userCount&#xff1a;用户数 itemCount&#xff1a;项目数 user_ratings&#xff1a;ArrayList<ArrayList>&#xff0c; 问&#xff1a;此处为什么要用二维数组&#xff1f; 答&#xff1a;第1维是用户&#xff0c;第2维是用户对所有项目的评分。 testRatin…

stacking模型融合_【干货】比赛后期大招之stacking技术分享

各位同学大家好&#xff0c;我是本次参赛选手李博&#xff0c;比赛ID是深蓝&#xff08;DeePBluE&#xff09;。现在就读于北京邮电大学&#xff0c;是一名研一的在校生&#xff0c;研究方向是数据分析和机器学习。是的&#xff0c;我又来分&#xff08;na&#xff09;享&#…

多stream_基础之Lambda和Stream的邂逅

基础之Lambda和Stream的邂逅show me the code and take to me,做的出来更要说的明白GitHub项目JavaHouse同步收录喜欢就点个赞呗! 你的支持是我分享的动力&#xff01;引入是否有遇到看不懂身边同事代码的情况&#xff0c;是否有被面试官问到 Java 新特性不懂的情况。我掐指一算…

注意力机制--转载自我的学生隆兴写的博客

原文链接为&#xff1a;https://a-egoist.com/posts/a44b8419/&#xff0c;学生自己搭建的博客&#xff0c;点赞&#xff01; 1 Attention 1.1 什么是 Attention 灵长类动物的视觉系统中的视神经接受了大量的感官输入。在检查视觉场景时&#xff0c;我们的视觉神经系统大约每…

python正弦波和等腰三角波_正弦波脉宽调制(SPWM)原理

1、QPWM的概念 在进行脉宽调制时&#xff0c;使脉冲系列的占空比按正弦规律来安排。当正弦值为最大值时&#xff0c;脉冲的宽度也最大&#xff0c;而脉冲间的间隔则最小&#xff0c;反之&#xff0c;当正弦值较小时&#xff0c;脉冲的宽度也小&#xff0c;而脉冲间的间隔则较大…

推荐系统--矩阵分解(1)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 1 引入 一个矩阵可以分解为两个小矩阵的乘积&#xff0c;以音乐为例&#xff0c;利用潜在特征向量来给用户和音乐打上标签&#xff…

python dag调度系统开发_基于机器学习的DAG调度平台

什么是DAG?有向无环图树形结构&#xff1a;除根节点&#xff0c;每个节点有且仅有一个上级节点&#xff0c;下级节点不限。根节点没有上级节点。图结构&#xff1a;每个节点上级、下级节点数不限。DAG调度平台的定义及场景任务调度是在各行各业是个基础问题&#xff0c;当任务…

轻量级人脸识别算法

1 概述 轻量级人脸识别算法

python元组与列表的区别、简答题_细解python面试题(一)元组和列表的区别

可能略去了一些内容。1、列表VS元组在python编程中&#xff0c;我们经常搞不懂列表和元组的区别&#xff0c;或者哪些函数可以用于列表&#xff0c;哪些用于元组&#xff0c;那么跟随本文我们来深入的探索。2、元组元组是值的集合&#xff0c;我们用圆括号来申明它。元组中的类…

Yolo家族算法分析

1 历史简介 2 YOLO算法思想 YOLO算法的基本思想&#xff1a; &#xff08;1&#xff09;将图片划分为SSS \times SSS个网格&#xff1b; &#xff08;2&#xff09;计算每个边界框和置信度&#xff1b; &#xff08;3&#xff09;计算每个网格属于某个类别的概率&#xff1b; &…

u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法

正常情况下&#xff0c;dedecms织梦系统的图片附件是按日保存的&#xff0c;一天一个文件夹, 时间长了, 这样在allimg中就会生成很多文件夹, 不方便管理&#xff0e;虽然&#xff0c;dedecms织梦的后台设置有”附件保存形式”的先项, 但功能太弱&#xff0c;如果是在后台上传和…

推荐系统--矩阵分解(2)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 3 BiasSVD&#xff1a;考虑偏置 有一些用户会给出偏高的评分&#xff0c;有一些物品也会收到偏高的评分&#xff0c;比如电影观众为…

tga文件怎么打开_教你win10系统怎么打开stp文件

stp文件怎么打开呢&#xff1f;近来有很多小伙伴反映有朋友发送了一个stp文件给它&#xff0c;搞了半天也没能打开。其实打开stp文件很简单&#xff0c;不过前提是需要有绘图软件。我给大家整理了打开stp文件的图文教程&#xff0c;赶紧来瞧瞧吧有些朋友在使用win10系统的过程中…

python爬取电子病历_一种基于中文电子病历的实体识别方法技术

本发明专利技术提供了一种基于中文电子病历的实体识别方法&#xff0c;涉及医疗实体识别技术领域。针对目前国内缺少公开中文电子病历标注语料库的缺陷&#xff0c;本发明专利技术通过构建整理医学词典&#xff0c;提出了一种半自动语料库标注方法&#xff0c;节省了人工标注的…

推荐系统--矩阵分解(4)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 7 基于情感分析的矩阵分解 7.1 引入 【摘要】推荐系统旨在基于丰富的信息预测用户的偏好&#xff0c;例如用户评分、人口统计和评论…

yarn 卸载包_0609-6.1.0-如何卸载CDH6.1

1.文档编写目的Fayson在两年前的文章中介绍过CDH的卸载&#xff0c;参考《如何卸载CDH(附一键卸载github源码)》。除非你是使用Cloudera官方提供的一键安装脚本安装的CDH&#xff0c;否则并没有现成的一键卸载的脚本供使用。为了更好的理解CDH的卸载&#xff0c;这里再次简单介…

推荐系统--矩阵分解(3)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 5 TimeSVD&#xff1a;增加时间因素 物品的受欢迎度随着时间而改变&#xff0c;例如&#xff0c;电影可以因外部事件(如新电影中演员…

python安装不了是什么问题_安装不上python的模块怎么办?别怕,我这有妙招!

之前我们介绍过如何在Python中安装第三方的包&#xff1a;Python以第三方包丰富而著称&#xff0c;你想要的功能几乎都可以通过pip命令安装&#xff0c;避免什么都要自己重新造轮子尬尴。但是pip安装有两个常见问题&#xff0c;第一是下载慢&#xff0c;第二是无法安装。慢的原…

推荐系统--矩阵分解(5)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 8 基于隐式反馈的矩阵分解 8.1 引入 相对于显示反馈的评分数据&#xff0c;隐式反馈有以下几方面的特征&#xff1a; 只有正反馈&…

xss跨站脚本攻击_网络安全xss跨站脚本攻击原理

以下在未经授权的网站操作均为违法行为XSS跨站脚本攻击xss的危害网络钓鱼&#xff0c;盗取各类账号密码我们先来看一下下面的案例&#xff1a;先来记住一下下面中的表我们来做一个转发上面页面显示已经登录&#xff0c;但是突然页面中提醒再此登录此时&#xff0c;我们并没有多…