sklearn应用线性回归算法

简介: sklearn应用线性回归算法

Scikit-learn 简称 sklearn 是基于 Python 语言实现的机器学习算法库,它包含了常用的机器学习算法,比如回归、分类、聚类、支持向量机、随机森林等等。同时,它使用 NumPy 库进行高效的科学计算,比如线性代数、矩阵等等。


Scikit-learn 是 GitHub 上最受欢迎的机器学习库之一,其最新版本是 2020 年12 月发布的 scikit-learn 0.24.1。


提示:Scikit-learn 官方网站:scikit-learn: machine learning in Python — scikit-learn 1.3.0 documentation


Scikit-learn 涵盖了常用的机器学习算法,而且还在不断的添加完善,对于本教程所涉及的机器学习算法它都做了良好的 API 封装,以供直接调用。你可以根据不同的模型进行针对性的选择。下面介绍 sklearn 中常用的算法库:


  • ·linear_model:线性模型算法族库,包含了线性回归算法,以及 Logistic 回归算法,它们都是基于线性模型。
  • .naiv_bayes:朴素贝叶斯模型算法库。
  • .tree:决策树模型算法库。
  • .svm:支持向量机模型算法库。
  • .neural_network:神经网络模型算法库。
  • .neightbors:最近邻算法模型库。


实现线性回归算法


下面我们是基于 sklearn 实现线性回归算法,大概可以分为三步,首先从 sklearn 库中导入线性模型中的线性回归算法,如下所示:

from sklearn import linear_model

其次训练线性回归模型。使用  fit() 喂入训练数据,如下所示:

model = linear_model.LinearRegression()  线性回归
model.fit(x, y)

最后一步就是对训练好的模型进行预测。调用 predict() 预测输出结果, “x_”为输入测试数据,如下所示:

model.predict(x_)

你可能会感觉 so easy,其实没错,使用 sklearn 算法库实现线性回归就是这么简单,不过上述代码只是一个基本的框架,要想真正的把这台“机器”跑起来,我们就得给它喂入数据,因此准备数据集是必不可少的环节。数据集的整理也是一门专业的知识,会涉及到数据的收集、清洗,也就是预处理的过程,比如均值移除、归一化等操作,如果熟悉 Pandas 的话应该了解, 因此这里不做重点讲解。


1) 准备数据


下面我们手动生成一个数据集,如下所示:

  1. 使用numpy准备数据集
  2. import numpy as np
  3. 准备自变量x,-3到3的区间均分间隔30份数
  4. x = np.linspace(3,6.40)
  5. #准备因变量y,这一个关于x的假设函数
  6. y = 3 * x + 2


2) 实现算法


#使用matplotlib绘制图像,使用numpy准备数据集

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model

#准备自变量x,生成数据集,3到6的区间均分间隔30份数

x = np.linspace(3,6.40)


#准备因变量y,这一个关于x的假设函数

y = 3 * x + 2


#由于fit 需要传入二维矩阵数据,因此需要处理x,y的数据格式,将每个样本信息单独作为矩阵的一行


x=[[i] for i in x]

y=[[i] for i in y]


构建线性回归模型

model=linear_model.LinearRegression()


训练模型,"喂入"数据

model.fit(x,y)


准备测试数据 x_,这里准备了三组,如下:

x_=[[4],[5],[6]]


打印预测结果

y_=model.predict(x_)

print(y_)


#查看w和b的

print("w值为:",model.coef_)

print("b截距值为:",model.intercept_)


#数据集绘制,散点图,图像满足函假设函数图像

plt.scatter(x,y)

plt.show()

通过线性回归得到的线性函数图像,如下所示:

image.png

图1:线性回归函数图像


打印输出结果如下所示:

测试集输出结果:
[[14.]
[17.]
[20.]]
w值为: [[3.]]
b截距值为: [2.]

通过上述代码我们就实现“线性回归”的过程,但是在实际情况中,我们要面临的数据集要复杂的多,绝大多数情况不会这样理想,都会存在一些波动。在生成数据集的代码段内添加以下代码,如下所示:

#准备自变量x,生成数据集,3到6的区间均分间隔30份数
x = np.linspace(3,6.40)
#准备因变量y,这一个关于x的假设函数
y = 3 * x + 2
# 添加代码,扰乱点的分布
x = x + np.random.rand(40)

利用 NumPy 的 random. rand() 随机生成 0 - 1 之前的波动数值,从而改变数据点的分布情况,如下所示:

image.png

图2:修改后的散点分布


虽然做标签散乱分布,但是使用线性回归算法学习依然可以得到线性函数,此时 w 与 b 的输出结果如下所示:

w值为: [[2.68673744]]
b截距值为: [0.80154335]

绘制最佳拟合直线,程序代码如下:


#使用matplotlib绘制图像,使用numpy准备数据集
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
#准备自变量x,生成数据集,-3到3的区间均分间隔30份数
x = np.linspace(3,6,40)
#准备因变量y,这一个关于x的假设函数
y=3 * x + 2
x = x + np.random.rand(40)
#准备因变量y,这一个关于x的假设函数
#由于fit 需要传入二维矩阵数据,因此需要处理x,y数据格式,将每个样本信息单独作为矩阵的一行
x=[[i] for i in x]
y=[[i] for i in y]
model=linear_model.LinearRegression()
model.fit(x,y)
#准备测试数据 x_,这里准备了三组,如下:
x_=[[4],[5],[6]]
打印预测结果
y_=model.predict(x_)
print(y_)
#查看w和b的
print("w值为:",model.coef_)
print("b截距值为:",model.intercept_)
#数据集绘制,散点图,图像满足函假设函数图像
plt.scatter(x,y)
#绘制最佳拟合直线
plt.plot(x_,y_,color="red",linewidth=3.0,linestyle="-")
plt.legend(["func","Data"],loc=0)
plt.show()

函数图像如下所示:

image.png

图3:拟合直线绘制


线性回归步骤


通过上述代码了解了如何使用 Python  sklearn 实现线性回归,下面从总整体出发再次审视该算法:掌握线性回归算法的具体步骤。


线性回归适用于有监督学习的回归问题,首先在构建线性模型前,需要准备好待输入的数据集,数据集按照需要可划分为训练集和测试集,使用训练集中的向量 X 与向量 Y 进行模型的训练,其中向量 Y 表示对应 X 的结果数值(也就是“参考答案”);而输出时需要使用测试集,输入测试 X 向量输出预测结果向量 Y。


其实线性回归主要解决了以下三个问题:

  • 第一,为假设函数设定了参数 w,通过假设函数画出线性“拟合”直线。
  • 第二,将预测值带入损失函数,计算出一个损失值。
  • 第三,通过得到的损失值,利用梯度下降等优化方法,不断调整 w 参数,使得损失值取得最小值。我们把这个优化参数值的过程叫做“线性回归”的学习过程。


线性回归算法简单,且容易理解,但这并不影响它的广泛应用,比如经济金融领域实现股票的预测,以及著名的波士顿房价预测,这些都是线性回归的典型应有,因此我们要走出一个误区,不要感觉算法简单就不重要,机器学习虽然算法众多,但每一种算法都有其存在的理由,而掌握了线性回归就相当于拿到了算法世界的入场券。


sklearn实现朴素贝叶斯


在 sklearn 库中,基于贝叶斯定理的算法集中在 sklearn.naive_bayes 包中,根据对“似然度 P(xi|y)”计算方法的不同,我们将朴素贝叶斯大致分为三种:


多项式朴素贝叶斯(MultinomialNB)

伯努利分布朴素贝叶斯(BernoulliNB)

高斯分布朴素贝叶斯(GaussianNB)


另外一点要牢记,朴素贝叶斯算法的实现是基于假设而来,在朴素贝叶斯看来,特征之间是相互独立的,互不影响的。


高斯朴素贝叶斯适用于特征呈正态分布的,多项式贝叶斯适用于特征是多项式分布的,伯努利贝叶斯适用于二项分布。


1) 算法使用流程


使用朴素贝叶斯算法,具体分为三步:

  • 统计样本数,即统计先验概率 P(y) 和 似然度 P(x|y)
  • 根据待测样本所包含的特征,对不同类分别进行后验概率计算。
  • 比较 y1,y2,...yn 的后验概率,哪个的概率值最大就将其作为预测输出。


2) 朴素贝叶斯算法应用


下面通过鸢尾花数据集对朴素贝叶斯分类算法进行简单讲解。如下所示:

#鸢尾花数据集
from sklearn.datasets import load_iris
#导入朴素贝叶斯模型,这里选用高斯分类器
from sklearn.naive_bayes import GaussianNB
#载入数据集
X,y=load_iris(return_X_y=True)
bayes_modle**=GaussianNB()**
#训练数据
bayes_modle.fit(X,y)
#使用模型进行分类预测
result=bayes_modle.predict(X)
print(result)
#对模型评分
model_score=bayes_modle.score(X,y)
print(model_score)

输出结果:

预测分类:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1
1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2
2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
模型评分:
0.96

鸢尾花数据集即iris


iris数据集文件: pan.baidu.com/s/1saL_4Q9P… .提取码:1234


数据集简介


数据集包含150个样本(数据集的行)


数据集包含4个属性(数据集的列):Sepal Length,Sepal Width,Petal Length,Petal Width:‘feature_names’


利用numpy.ndarray存储这150x4的数据:‘data’


分类标签取自array[‘Setosa’,‘Versicolour’,‘Virginica’]:‘target_names’

Setosa,Versicolour,Virginica是数据集所包含的3中品种的鸢尾花


这3个分类标签(即150x1数据)用np.ndarray存储:‘target’


总之,这个数据存储了150x4的特征数据和150x1的分类标签,其中特征数据又放在‘data’里,分类标签放在‘target’里


目录
打赏
0
0
0
0
31
分享
相关文章
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
46 15
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
MapReduce在实现PageRank算法中的应用
总结来说,在实现PageRank算法时使用MapReduce能够有效地进行大规模并行计算,并且具有良好的容错性和可扩展性。
116 76
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
18 3
从第十批算法备案通过名单中分析算法的属地占比、行业及应用情况
2025年3月12日,国家网信办公布第十批深度合成算法通过名单,共395款。主要分布在广东、北京、上海、浙江等地,占比超80%,涵盖智能对话、图像生成、文本生成等多行业。典型应用包括医疗、教育、金融等领域,如觅健医疗内容生成算法、匠邦AI智能生成合成算法等。服务角色以面向用户为主,技术趋势为多模态融合与垂直领域专业化。
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统
阿里云向量检索服务Milvus 2.5版本在全文检索、关键词匹配以及混合检索(Hybrid Search)方面实现了显著的增强,在多模态检索、RAG等多场景中检索结果能够兼顾召回率与精确性。本文将详细介绍如何利用 Milvus 2.5 版本实现这些功能,并阐述其在RAG 应用的 Retrieve 阶段的最佳实践。
通过Milvus内置Sparse-BM25算法进行全文检索并将混合检索应用于RAG系统
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
36 3
从第九批深度合成备案通过公示名单分析算法备案属地、行业及应用领域占比
2024年12月20日,中央网信办公布第九批深度合成算法名单。分析显示,教育、智能对话、医疗健康和图像生成为核心应用领域。文本生成占比最高(57.56%),涵盖智能客服、法律咨询等;图像/视频生成次之(27.32%),应用于广告设计、影视制作等。北京、广东、浙江等地技术集中度高,多模态融合成未来重点。垂直行业如医疗、教育、金融加速引入AI,提升效率与用户体验。
|
1月前
|
探讨组合加密算法在IM中的应用
本文深入分析了即时通信(IM)系统中所面临的各种安全问题,综合利用对称加密算法(DES算法)、公开密钥算法(RSA算法)和Hash算法(MD5)的优点,探讨组合加密算法在即时通信中的应用。
24 0

热门文章

最新文章