简单的有监督学习实例——简单线性回归[通俗易懂]

简单的有监督学习实例——简单线性回归[通俗易懂]sklearn.linear_model.LinearRegression线性回归https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html首先,要创建一组数据,随机选取一组x数据,然后计算出它在2x-1这条线附近对应的数据,画出其散点图:#演示简单的线性回归i…

大家好,又见面了,我是你们的朋友全栈君。

一、 sklearn.linear_model.LinearRegression 线性回归

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

首先,要创建一组数据,随机选取一组x数据,然后计算出它在2x-1这条线附近对应的数据,画出其散点图:

# 演示简单的线性回归
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.RandomState(42)
x = 10 * rng.rand(50)
y = 2 * x - 1 + rng.randn(50)   # 在 2x-1上下附近的x对应的值
plt.scatter(x, y)

在这里插入图片描述
接下来,就按照步骤一步步实现:

1、选择模型类:

在这个例子中,我们想要计算一个简单的线性回归模型,可以直接导入线性回归模型类:

from sklearn.linear_model import LinearRegression
2、选择模型超参数

在上一步选择好模型类之后,还有许多的参数需要配置。比如下面的:

  • 拟合偏移量(直线的截距)
  • 对模型进行归一化处理
  • 对特征进行预处理以提高模型灵活性
  • 在模型中使用哪两种正则化类型
  • 使用多少模型组件

对于这个线性回归实例,可以实例化 LinearRegression 类并用 fit_intercept 超参数设置是否想要拟合直线的截距。

>>>model = LinearRegression(fit_intercept=True)  # fit_intercept为 True 要计算此模型的截距
>>>model
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,
         normalize=False)

可以看到model 的参数配置

3、将数据整理成特征矩阵和目标数组

根据Scikit-Learn的数据表示方法,它需要二维特征矩阵和一维目标数组。现在,我们已经有了长度为 n_samples 的目标数组,但还需要将数据 x 整理成 [n_samples, n_features] 的形式。 np.newaxis 是插入新维度。

>>>X = x[:, np.newaxis]  # 将 x 数据整理成 [n_samples, n_features] 的形式
>>>X.shape
(50, 1)
4、用模型拟合数据
model.fit(X, y)   # fit 拟合后的结果存在model属性中

所有通过fit方法获得的模型参数都带一条下划线。

>>>model.coef_     # 拟合的直线斜率
array([1.9776566])
>>>model.intercept_     # 拟合的直线截距
-0.9033107255311164

可以发现,拟合出来的直线斜率和截距和前面样本数据定义(斜率2,截距-1)非常接近。

5、预测新数据的标签

模型训练出来以后,有监督学习的主要任务变成了对不属于训练集的新数据进行预测。用 predict() 方法进行预测。“新数据”是特征矩阵的 x 的坐标值,我么需要用模型预测出目标数组的 y 轴坐标:

xfit = np.linspace(-1, 11)   # 产生新数据,是特征矩阵的 x 的坐标值

将这些 x 值转换成[n_samples, n_features] 的特征矩阵形式,

Xfit = xfit[:, np.newaxis]   # 将数据转变为[n_samples, n_features] 的形式
yfit = model.predict(Xfit)   # 用模型预测目标数组的 y 轴坐标

然后,把原始数据和拟合结果都可视化出来:

plt.scatter(x, y)
plt.plot(xfit, yfit)

在这里插入图片描述

二、鸢尾花数据分类

问题示例:如何为鸢尾花数据集建立模型,先用一部分数据进行训练,再用模型预测出其他样本的标签?
下面使用高斯朴素贝叶斯方法完成任务。由于需要用模型之前没有接触过的数据评估它的训练效果,因此得先将数据分割成训练集和测试集。可以借助 train_test_split 函数分割很方便:
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(x_iris,
									 y_iris, random_state=1)   # 对数据进行分类
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()     # 初始化模型
model.fit(xtrain, ytrain)  # 用模型拟合数据
y_model = model.predict(xtest)   # 对新数据进行预测
from sklearn.metrics import accuracy_score
accuracy_score(ytest, y_model)  # 输出模型预测准确率
0.9736842105263158

理清楚一下上面程序的过程:

  1. 把数据集分类成 xtrain, xtest, ytrain, ytest
  2. 用训练集数据 xtrain, ytrain 来进行拟合
  3. 根据拟合的结果来对 xtest 数据进行预测
  4. 得出预测结果 y_model 和原来结果 y_test 的准确率

三、鸢尾花数据降维

PCA: https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
PCA.fit_transform : https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA.fit_transform
sns.lmplot() : https://seaborn.pydata.org/generated/seaborn.lmplot.html

from sklearn.decomposition import PCA
model = PCA(n_components=2)   # 设置超参数,初始化模型
model.fit(x_iris)    # 拟合数据,这里不用y变量
x_2d = model.transform(x_iris)   # 将数据转化成二维
iris['PCA1'] = x_2d[:, 0]
iris['PCA2'] = x_2d[:, 1]
sns.lmplot('PCA1', 'PCA2', hue='species', data=iris, fit_reg=False)

在这里插入图片描述

四、鸢尾花数据分类

对鸢尾花数据进行聚类。聚类算法是对没有任何标签的数据集进行分组。
GaussianMixture: https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html

from sklearn.mixture import GaussianMixture
model = GaussianMixture(n_components=3, covariance_type='full')
model.fit(x_iris)
y_gmm = model.predict(x_iris)
iris['cluster'] = y_gmm
sns.lmplot('PCA1', 'PCA2', hue='species', data=iris, col='cluster', fit_reg=False)

在这里插入图片描述
可以看出,第二幅图中的花的颜色还有一点混淆。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140456.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最新仿金蝶电商ERP进销存系统软件源码 销售库存仓库财务管理收银系统网络版「建议收藏」

    最新仿金蝶电商ERP进销存系统软件源码 销售库存仓库财务管理收银系统网络版「建议收藏」源码说明:超强的工作流系统,强大的可视化工作流编辑器,灵活自定义表单设计,充分实现企业基于工作流的各项业务管理,与其他模块数据(如HRM等)完美结合。全面综合的任务系统,实现基于信息录入、单据管理、业务协作、工作流转、任务提醒、统计分析等的智能管理。所有单据均支持上传附件功能;且报价单、销售合同、采购订单、发货出库、入库单、派工单等所有模板均支持自定义编辑打印。集成功能实用的CRM系统、进销存系统、生产ERP系统,实现对客户销售、供应商采购、产品物料、库存统计、生产监控等的精细化管理,直观强大的销售

    2022年5月11日
    49
  • 高中必备学习软件_有那些免费好用的高中学习软件?[通俗易懂]

    高中必备学习软件_有那些免费好用的高中学习软件?[通俗易懂]刷题类1.猿题库记录一天时间app安卓1.爱今天2.timingIOS1.时间块2.atimelogger3.ihour4.nowthenfree专注类1.forest2.番茄todo背单词app这个感觉好多人都知道1.沪江开心词场2.扇贝单词3.百词斩4.知米背单词5.墨墨背单词6.不背单词7.单词日记8.易呗背单词听力方面app可可英语英语流利说每日英语听力沪江听力网易云的电台朗易思听缤…

    2022年10月6日
    3
  • Java学习路线总结,搬砖工逆袭Java架构师[通俗易懂]

    前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干活的,缺PM。也许这也是这个行业的现状,也是传说中的“35岁危机”的最好解释,如果你马上35岁了,但是你能干的,毕业生也能干,老板还要你作甚?所以,从今天开始(2021年9月4日),开启《100天进阶高级工程师》系列。Java学习路线我觉得一个Java程序员的学习路线应该是:javase; javaweb; 数据库; ssm; springboot; 数据结构与算法; JVM;

    2022年4月9日
    49
  • pycharm运行无结果,无报错_pycharm看不到运行结果

    pycharm运行无结果,无报错_pycharm看不到运行结果pycharm_运行不出结果,也不报错_Processfinishedwithexitcode0用pycharm运行程序的时候,运行不出结果,也不报错,且正常退出解决1:将run→editconfigurations→runwithpythonconsole勾掉解决2:注意空格注意空格!!!我的情况是程序中一个小循环的空格缩进不对记录一下…

    2022年8月27日
    6
  • MFC CCriticalSection 关键段

    MFC CCriticalSection 关键段和其他同步对象不同,除非有需要以外,关键区域工作在用户模式下。若一个线程想运行一个封装在关键区域中的代码,它首先做一个旋转封锁,然后等待特定的时间,它进入内核模式去等待关键区域。实际上,关键区域持有一个旋转计数器和一个信号量,前者用于用户模式的等待,后者用于内核模式的等待(休眠态)。在Win32API中,有一个CRITICAL_SECTION结构体表示关键区域对象。在MFC中,有一个类CCri

    2022年7月21日
    15
  • pytest parametrize fixture_参数化数据

    pytest parametrize fixture_参数化数据前言当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。官方示

    2022年7月29日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号