【matlab】大数据基础与应用实例

news2024/12/23 18:27:07

目录

引言

线性回归模型

基本形式

最小二乘法

多元线性回归

线性回归的假设

模型评估

应用

独热编码

原理

应用场景

优点

缺点

数据收集

数据可视化

数据处理与分析

完整代码


引言

线性回归模型

线性回归模型是一种用于预测连续值输出(或称为因变量)的统计方法,它基于一个或多个自变量(或称为解释变量、特征)与因变量之间的线性关系。在线性回归中,我们假设因变量与自变量之间的关系可以通过一个线性方程来描述,即因变量是自变量的线性组合加上一个误差项。

基本形式

线性回归模型的基本形式可以表示为:

y=\beta_0+\beta_1x_1+\beta_2x_2+\cdots+\beta_nx_n+\epsilon

其中:

  • y 是因变量(预测目标)。
  • β0​ 是截距项(或称为常数项)。
  • β1​,β2​,…,βn​ 是回归系数(或称为斜率),它们表示了各自变量对因变量的影响程度。
  • x1​,x2​,…,xn​ 是自变量(特征)。
  • ϵ 是误差项,表示模型未能捕捉到的变异或随机噪声。
最小二乘法

线性回归模型通常使用最小二乘法(Least Squares Method)来估计回归系数 β0​,β1​,…,βn​。最小二乘法的目标是找到一组回归系数,使得预测值与实际值之间的平方误差和(即残差平方和,RSS)最小。

多元线性回归

当模型包含多个自变量时,称为多元线性回归。在多元线性回归中,我们同样使用最小二乘法来估计回归系数,但需要考虑多个自变量之间的相互作用。

线性回归的假设

线性回归模型的有效性基于以下假设:

  1. 线性关系:自变量与因变量之间存在线性关系。
  2. 独立性:观测值之间相互独立。
  3. 同方差性:误差项 ϵ 的方差在所有观测值中都是相同的。
  4. 正态性:误差项 ϵ 服从正态分布。
模型评估

线性回归模型的性能可以通过多种指标来评估,包括但不限于:

  • 均方误差(MSE):预测值与实际值之差的平方的平均值。
  • 均方根误差(RMSE):MSE的平方根,与原始数据的量纲相同,便于理解。
  • 决定系数(R²):表示模型预测值与实际值之间的拟合程度,取值范围从0到1,值越大表示模型拟合得越好。
应用

线性回归模型广泛应用于各种领域,如经济学、统计学、工程学和自然科学等,用于预测、趋势分析和因果推断等。

独热编码

独热编码(One-Hot Encoding),又称一位有效编码,是数据预处理中常用的一种技术,主要用于处理分类数据。在机器学习和数据科学领域,独热编码是一种将分类变量(离散特征、无序特征)转换为数值型数据的方法,以便机器学习算法能够处理。以下是对独热编码的详细介绍:

原理

独热编码使用N位状态寄存器来对N个状态进行编码,每个状态都有其独立的寄存器位,且在任意时刻,只有一位是有效的(即设置为1),其余位都是0。这种方法通过将每个分类值映射到一个唯一的二进制向量上,确保模型正确理解非数值分类特征,同时避免了模型错误地解释分类值之间可能存在的数值关系。

应用场景

独热编码特别适用于处理那些具有明确、有限且通常不带有数值意义的分类值的数据。例如,在性别特征中,“男”和“女”之间没有数值上的大小或顺序关系;在颜色特征中,“红”、“绿”和“蓝”也是纯粹的分类标签,没有隐含的数值含义。

优点
  1. 计算机友好:计算机更擅长处理数字而不是文字或标签。使用独热编码,我们可以将分类数据转化为数值型数据,使得计算机能够更轻松地理解和处理。
  2. 防止大小关系误解:如果我们直接用数字来表示分类(如0、1、2等),计算机可能会误以为这些数字之间存在大小或顺序关系。独热编码避免了这种误解。
  3. 适用于各种算法:许多机器学习算法,尤其是涉及距离计算的算法(如K近邻算法),更适合处理数值型数据。独热编码将分类数据转换为二进制形式,使得这些算法能够更好地处理。
  4. 模型的需求:在深度学习等领域,神经网络的输入层通常期望是数值型数据。独热编码为我们提供了一种有效的方式,将分类数据转换为适用于神经网络的形式。
缺点
  1. 维度爆炸:独热编码会在原始特征的基础上引入大量的新特征,导致维度爆炸,特别是当分类数量较多时。这可能增加计算复杂性和存储空间需求。
  2. 不适用于高基数特征:当分类的类别数量非常大时,独热编码可能变得不切实际。这可能导致训练数据过于稀疏,影响模型的性能。
  3. 信息冗余:由于每个类别都有一个独立的特征,独热编码可能引入冗余信息。对于某些模型,这可能导致冗余特征的存在。
  4. 不考虑特征之间的关联性:独热编码将每个类别视为独立的特征,不考虑类别之间的关联性。这可能忽略了一些信息,特别是对于具有内在顺序关系的分类数据。

综上所述,独热编码是一种有效的数据预处理技术,能够将分类数据转换为适合机器学习算法处理的数值型数据。然而,在使用独热编码时需要注意其优缺点以及适用场景,并结合实际情况进行选择和调整。

数据收集

这里选择了电影相关数据集如图所示:

数据可视化

% 1、散点图,展示评分与评分人数的关系
figure;
scatter(data.Rating, data.NumRatings, 'filled');
xlabel('评分');
ylabel('评分人数');
title('电影评分与评分人数关系');

% 2、直方图,展示电影评分的分布
figure;
histogram(data.Rating, 'BinWidth', 0.5);
xlabel('评分');
ylabel('电影数量');
title('电影评分分布');

% 3、条形图,展示各个国家/地区电影数量
figure;
categories = categorical(data.CountryRegion);
uniqueCategories = unique(categories);
counts = histcounts(categories, 'Normalization', 'count');
bar(uniqueCategories, counts);
xlabel('国家/地区');
ylabel('电影数量');
title('各个国家/地区电影数量');

% 4、盒须图,展示电影时长的分布
figure;
boxplot(data.Duration);
ylabel('时长(分钟)');
title('电影时长分布');


% 5、饼状图,统计不同类型电影的数量
for i = 1:length(uniqueGenres)
    genreCounts(i) = sum(genres == uniqueGenres(i));
end
figure;
p = pie(genreCounts, uniqueGenres);
title('不同类型电影的分布');

数据处理与分析

对电影评分数据的预处理、特征编码、线性回归模型的训练和交叉验证,以及最后绘制实际评分与预测评分的对比图。

完整代码

clc;

% 读取Excel文件
data = readtable('data.xlsx');

%数据预处理
% 数据清洗,删除包含空值的行
data = rmmissing(data);
% 将中文列名映射到英文变量名
data.Properties.VariableNames = {'Movie', 'Year', 'Rating', 'NumRatings', 'Actors', 'Genre', 'CountryRegion', 'Duration'};
% 时长列是字符串,需要转换为数值
data.Duration = str2double(regexprep(data.Duration, '[^\d]', ''));
%将类别特征转换为数值特征
genres = string(data.Genre);  
uniqueGenres = unique(genres);
genreCounts = zeros(size(uniqueGenres));


%数据可视化
% 1、散点图,展示评分与评分人数的关系
figure;
scatter(data.Rating, data.NumRatings, 'filled');
xlabel('评分');
ylabel('评分人数');
title('电影评分与评分人数关系');

% 2、直方图,展示电影评分的分布
figure;
histogram(data.Rating, 'BinWidth', 0.5);
xlabel('评分');
ylabel('电影数量');
title('电影评分分布');

% 3、条形图,展示各个国家/地区电影数量
figure;
categories = categorical(data.CountryRegion);
uniqueCategories = unique(categories);
counts = histcounts(categories, 'Normalization', 'count');
bar(uniqueCategories, counts);
xlabel('国家/地区');
ylabel('电影数量');
title('各个国家/地区电影数量');


% 4、盒须图,展示电影时长的分布
figure;
boxplot(data.Duration);
ylabel('时长(分钟)');
title('电影时长分布');


% 5、饼状图,统计不同类型电影的数量
for i = 1:length(uniqueGenres)
    genreCounts(i) = sum(genres == uniqueGenres(i));
end
figure;
p = pie(genreCounts, uniqueGenres);
title('不同类型电影的分布');


% 确保年份,评分人数和时长列为数值类型
data.Year = str2double(string(data.Year));
data.NumRatings = str2double(string(data.NumRatings));
data.Duration = str2double(string(data.Duration));


% 数据预处理
% 使用独热编码(One-Hot Encoding)处理类型特征
genreMatrix = zeros(height(data), length(uniqueGenres));
for i = 1:height(data)
    genreIndices = ismember(uniqueGenres, strsplit(genres(i), ', '));
    genreMatrix(i, genreIndices) = 1;
end

% 组合所选特征
X = [data.Year, data.NumRatings, data.Duration, genreMatrix];
y = data.Rating;

% 标准化特征矩阵
X = normalize(X);

% 使用线性回归模型进行k折交叉验证
k = 5; % 5折交叉验证
cv = cvpartition(height(data), 'KFold', k);

mseValues = zeros(k, 1); % 存储每折的均方误差
yPredAll = cell(k, 1); 
for i = 1:k
    trainIdx = training(cv, i);
    testIdx = test(cv, i);
    
    % 训练模型
    model = fitlm(X(trainIdx, :), y(trainIdx));
    
    % 测试模型
    yPred = predict(model, X(testIdx, :));
    yPredAll{i} = yPred; % 存储每折的预测值
    
    % 计算均方误差
    mseValues(i) = mean((y(testIdx) - yPred).^2);
end

% 输出平均均方误差
averageMSE = mean(mseValues);
disp(['平均均方误差: ', num2str(averageMSE)]);

% 绘制实际值和预测值的曲线图
figure;
hold on;

% 初始化一个数组来存储所有实际值和预测值
allYActual = [];
allYPred = [];

for i = 1:k
    testIdx = test(cv, i);
    yActual = y(testIdx);
    yPred = yPredAll{i};
    
    % 检查向量长度是否一致
    if length(yActual) == length(yPred)
        allYActual = [allYActual; yActual]; % 将每折的实际值添加到总数组中
        allYPred = [allYPred; yPred];       % 将每折的预测值添加到总数组中
    else
        warning(['Fold ', num2str(i), ' 的预测值和实际值长度不匹配']);
    end
end

% 根据索引排序,以便绘制曲线图
[~, sortIdx] = sort(allYActual);
sortedYActual = allYActual(sortIdx);
sortedYPred = allYPred(sortIdx);

% 绘制曲线图
plot(sortedYActual, '-b', 'DisplayName', '实际值'); % 蓝色实线表示实际值
hold on;
plot(sortedYPred, '-r', 'DisplayName', '预测值');   % 红色实线表示预测值

xlabel('样本索引');
ylabel('评分');
title('实际值与预测值曲线图');
legend('show'); % 显示图例
hold off;

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

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

相关文章

「iOS」暑假第一周 —— ZARA的仿写

暑假第一周 ZARA的仿写 文章目录 暑假第一周 ZARA的仿写写在前面viewDidLoad 之中的优先级添加自定义字体下载想要的字体添加至info之中找到字体名字并应用 添加应用图标和启动页面 写在前面 暑假第一周留校学习,对于ZARA进行了仿写,在仿写的过程之中&a…

WPF学习(2) -- 样式基础

一、代码 <Window x:Class"学习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/2008&…

计算机网络之网络互连

1.什么是网络互连 1.1网络互连的目的 将两个或者两个以上具有独立自治能力的计算机网络连接起来&#xff0c;实现数据流通&#xff0c;扩大资源共享范围&#xff0c;或者容纳更多用户。 网络互连包括&#xff1a; 同构网络、异构网络的互连&#xff0c; 局域网与局域网&…

【操作系统】文件管理——文件管理基础、文件的逻辑结构和目录结构(个人笔记)

学习日期&#xff1a;2024.7.14 内容摘要&#xff1a;文件管理基础、文件的逻辑结构、文件目录 文件管理基础 引言 文件是一组有意义的信息/数据的集合&#xff0c;计算机中存放着各种各样的文件&#xff0c;一个文件有哪些属性&#xff1f; 操作系统应该向上层的应用程序提…

网络 闲聊

闲谈 闲话 网络安全——>网络空间安全 网络空间&#xff1a;一个由信息基础设备组成互相依赖的网络 继&#xff1a;海、陆、空、天、的第五大空间 信息安全的一个发展&#xff1a; 通信保密阶段---计算机安全---信息系统安全---网络空间安全 棱镜门事件 棱镜计划&…

leetcode日记(38)字母异位词分组

最开始的想法是创建vector<vector<string>> result&#xff0c;然后遍历strs中字符串&#xff0c;遍历result中vector&#xff0c;比较vector中第一个string和strs中string&#xff0c;若为字母异位词&#xff0c;则加入vector&#xff0c;若无&#xff0c;则创建新…

数学基础 三角函数、两条平行线截距

三角函数变化公式 已知两条平行线&#xff0c;其中一条的起始点p1&#xff0c;p2&#xff0c;其中一条直线 p3&#xff0c;p4计算两条直线之间的截距 在二维平面上&#xff0c;当我们说“两条直线之间的截距”时&#xff0c;这通常意味着我们需要找到一条与这两条直线都相交的…

鸿蒙语言基础类库:【@system.battery (电量信息)】

电量信息 说明&#xff1a; 从API Version 6开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.batteryInfo]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import battery from syste…

8款值得收藏的App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 值得一试的大众APP&#xff0c;它可能会给你的生活带来小小的改变。把下面的内容看完&#xff0c;我确信你一定会收获不少。 一、Todo清单——重…

Django 删除所有数据

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Post(models.Model):title models.CharField(max_length200)content models.TextField()pub_date models.DateTimeField(date published)class Book(models.Model):title models.CharFiel…

Flowable-流程设计

接上文&#xff0c;对flowable的基础概念进行了介绍&#xff0c;本文开始&#xff0c;安装部署flowable-ui的官方流程设计器&#xff0c;实现流程图的绘制&#xff0c;并将绘制的流程图&#xff0c;保存到自己的数据库中。 一、安装Flowable-UI 本文介绍的flowable的版本为6.7.…

【C++】——入门基础

文章目录 命名空间输入与输出缺省参数函数重载引用内敛函数指针控制nullptr 命名空间 当C语言遇到命名冲突时&#xff0c;很难解决&#xff0c;所以C关键字namespace就是针对这种问题的。 如何使用命名空间内的成员呢&#xff1f; 加命名空间名称及限定符&#xff08; &#…

PHP贵州旅游攻略系统-计算机毕业设计源码16663

目 录 第 1 章 引 言 1.1 选题背景与意义 1.2 国内外研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析 2.3 系…

昇思25天学习打卡营第21天|基于MindSpore的DCGAN生成漫画头像

基于MindSpore的DCGAN生成漫画头像 GAN基础原理 生成对抗网络&#xff08;GAN&#xff09;的基础原理是通过两个互相博弈的模型&#xff0c;生成模型和判别模型&#xff0c;来实现对数据分布的学习并产生新的、与真实数据极其相似的数据实例。 生成对抗网络&#xff08;GAN&a…

Win10工具:批量word转png图片

首先声明这个小工具是小编本人开发的&#xff0c;无任何广告&#xff0c;会员收费机制等&#xff0c;永久使用。允许公司或个人使用&#xff0c;不允许倒卖&#xff0c;否则发现后会追究法律责任&#xff0c;毕竟开发不易。工具是用python开发的。 功能非常单一&#xff0c;就…

acrobat 中 PDF 复制时不能精确选中所选内容所在行的一种解决方法

现象&#xff1a;划取行的时候&#xff0c;自动扩展为多行 如果整段选中复制&#xff0c;粘贴后是乱码 解决步骤 识别完&#xff0c;保存 验证 可以按行复制了。 如果遇到仅使用 acrobat OCR 不能彻底解决的&#xff0c;更换其他自己熟悉的进行 OCR。

[misc]-流量包-菜刀666

菜刀&#xff0c;中国菜刀&#xff1f;命令执行&#xff0c;打开流量包发现&#xff0c;一句话木马 whoaii,ls 等命令。 这里有张图片FFD8(JPG)文件头 目录遍历&#xff0c;也多了一张图片6666.jpg 通过工具将16进制保存为文件得到图片&#xff1a;Th1s_1s_p4sswd_!!! 这里的提…

[线性RNN系列] Mamba: S4史诗级升级

前言 iclr24终于可以在openreview上看预印本了 这篇&#xff08;可能是颠覆之作&#xff09;文风一眼c re组出品&#xff1b;效果实在太惊艳了&#xff0c;实验相当完善&#xff0c;忍不住写一篇解读分享分享。 TL;DR &#xff08;overview&#xff09; Structured State-Sp…

完全免费的PDF软件

PDFgear - 将易于使用的PDF软件带给大众PDFgear是一款功能齐全的PDF管理软件&#xff0c;适用于Windows、Mac和移动设备&#xff0c;而且完全免费。https://www.pdfgear.com/zh/

elasticsearch性能调优方法原理与实战

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…