机器学习基础(二)监督与非监督学习

        导语:更深入地探讨监督学习和非监督学习的知识,重点关注它们的理论基础、常用算法及实际应用场景。

        上一节我们深入探索机器学习的根本原理,包括基本概念、分类及如何通过构建预测模型来应用这些理论,详情可见:

机器学习基础(一)理解机器学习的本质-CSDN博客将在本节深入探索机器学习的根本原理,包括基本概念、分类及如何通过构建预测模型来应用这些理论。https://blog.csdn.net/qq_52213943/article/details/136162632?spm=1001.2014.3001.5501

目录

监督学习

理论基础

常见算法

应用场景

 非监督学习

理论基础

常见算法

应用场景

实战案例:预测房价

问题背景

业务目标

数据集描述

数据清洗

处理缺失值

去除异常值

转换非数值数据

特征选择

相关性分析

特征重要性评估

模型构建与训练


监督学习

        监督学习的核心在于从带有标签的数据中学习,在这种有标签的数据学习的过程中,算法的目标是找到输入特征和输出标签之间的映射关系。

理论基础

        监督学习算法尝试建立一个模型,该模型可以对给定的输入数据做出准确的预测。这通常涉及到从数据中识别模式并建立预测函数。常见的监督学习任务包括分类和回归。分类任务预测离散的标签,而回归任务预测连续的输出。

常见算法

线性回归:在回归任务中,模型尝试找到特征和连续标签之间的线性关系。

决策树:这是一种可以用于分类和回归的算法,它通过一系列规则来进行预测。

支持向量机(SVM):SVM是一种强大的分类算法,特别适合处理高维空间中的数据。

应用场景

        在医疗领域,监督学习可以用于疾病诊断,如基于患者数据预测糖尿病。此流程图是一个简化的糖尿病预测监督学习模型的创建和使用过程,在实际应用中可能需要更多的细节和额外的步骤,如特征选择、交叉验证、模型解释等。

        在金融行业,监督学习被用于信用评分和欺诈检测。此流程图简要概述了监督学习在金融行业中的欺诈检测应用。实际应用中,可能还需要考虑数据隐私、合规性、模型解释性和实时性等因素。

 非监督学习

        非监督学习与监督学习不同,因为它处理的是没有标签的数据。这种类型的学习更多关注于发现数据内部的结构和模式。

理论基础

        非监督学习的目标是探索数据的内在结构和模式,而不是预测标签。主要任务包括聚类、关联规则学习和降维。

常见算法

K-均值聚类:这是一种广泛使用的聚类算法,旨在将数据分成多个类别或群体。

主成分分析(PCA):PCA是一种降维技术,用于减少数据集的复杂性,同时保留最重要的信息。

应用场景

        市场细分是非监督学习的一个经典应用,通过聚类相似的消费者来发现不同的市场细分。这个过程旨在将市场中的消费者或客户分成具有相似需求、行为或特征的不同组群,以便企业能够更好地理解和满足不同市场细分的需求。市场细分的一般流程如图:

        

        在文本分析和自然语言处理中,非监督学习可用于主题建模和文档聚类等领域。主题建模用于发现文本数据中的主题或话题。这在新闻文章分类、社交媒体分析、文档摘要生成等领域非常有用;文档聚类则用于将文档根据其相似性分组,以便于文本检索、信息检索、情感分析等任务。

        主题建模是一种非监督学习技术,用于从文本数据中自动识别和提取主题或话题。它在自然语言处理领域中有广泛的应用,可以帮助人们理解大规模文本语料库中的内容和趋势。主题是文本数据中一种抽象的概念,通常由一组相关的单词组成,描述了文档或文本片段的内容。主题建模旨在通过分析文本数据中的单词分布来自动发现这些主题。

        主题建模的经典算法有:Latent Dirichlet Allocation (LDA): LDA是主题建模中最知名的算法之一。它假设文档是由一组主题混合而成的,每个主题都有一组相关的单词。LDA通过迭代过程来估计文档中的主题分布和主题中的单词分布;Non-Negative Matrix Factorization (NMF): NMF是另一种用于主题建模的算法。它通过将文本数据矩阵分解为两个非负矩阵来发现主题。一个矩阵代表主题-文档关系,另一个代表主题-单词关系。主题建模的流程如图:

实战案例:预测房价

        我们将通过一个实战案例来具体展示如何使用监督学习构建一个预测模型。我们选择的案例是房价预测,这是一个经典的回归问题,目的是根据房屋的特征来预测其售价。

问题背景

        在房地产市场,正确估计房屋价值对于买家、卖家、投资者乃至房地产经纪人都至关重要。房价受多种因素影响,包括房屋的大小、位置、年龄、近期装修情况等。

业务目标

        开发一个模型,准确预测不同特征组合下房屋的市场售价。为房地产公司、投资者提供快速估价工具,帮助他们做出更明智的投资和购买决策。

数据集描述

每个样本包含如下特征:

  1. 基本属性:面积、房间数、楼层数、建造年份等。

  2. 地理位置:所在城市、街区、是否靠近市中心等。

  3. 附加属性:地下室面积、车库情况、花园大小等。

        房价数据集的特征涵盖房屋的基本构造(如面积、房间数、楼层数、建造年份)、所处的地理位置(城市、街区、邻近市中心的情况)以及额外设施(地下室、车库、花园),为评估房产价值提供了全面信息。

数据清洗

        数据清洗是机器学习项目中至关重要的一步,它直接影响模型的性能。对于房价预测案例,数据清洗的基本步骤包括:

处理缺失值

        检查数据集中的缺失值。对于少量缺失的特征,可以使用均值、中位数或众数来填充。如果某个特征有大量缺失值,可以考虑删除该特征

import pandas as pd
# df包含了你的数据集
df = pd.read_csv('home_price.csv')
# 检查数据集中的缺失值
missing_values = df.isnull().sum()
# 显示每个特征的缺失值数量
print("缺失值统计:")
print(missing_values)
# 处理缺失值
for column, count in missing_values.items():
    if count > 0:
        if count < len(df) * 0.1:  # 少量缺失的特征,使用均值填充
            df[column].fillna(df[column].mean(), inplace=True)
        else:  # 大量缺失的特征,删除该特征
            df.drop(column, axis=1, inplace=True)
# 显示处理后的数据集信息
print("\n处理后的数据集信息:")
print(df.info())

去除异常值

        识别并去除异常值,这些可能是由于输入错误或其他非典型情况造成的。使用统计方法(如Z-score)或可视化方法(如箱线图)来检测异常值。

import pandas as pd
import numpy as np
from scipy import stats

# 创建一个包含异常值的DataFrame示例
data = {'Value': [10, 15, 20, 25, 100]}
df = pd.DataFrame(data)
# 计算Z-score
z_scores = np.abs(stats.zscore(df))
# 设置阈值,通常选择阈值为2或3
threshold = 2
# 找到Z-score超过阈值的行
outliers = np.where(z_scores > threshold)
# 去除异常值
df_cleaned = df[(z_scores < threshold).all(axis=1)]
# 显示去除异常值后的DataFrame
print("去除异常值后的DataFrame:")
print(df_cleaned)

转换非数值数据

        很多机器学习算法要求输入是数值型的。因此,对于类别型数据(如街区名称),我们需要进行编码,如使用独热编码(One-Hot Encoding)

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

# 假设df是Pandas DataFrame,包含了房屋的特征和目标价格
# 分离特征和目标变量
X = df.drop('Price', axis=1)
y = df['Price']

# 数值型和类别型特征的列名
numeric_features = ['Area', 'Rooms', 'Age']
categorical_features = ['Location', 'Type']


# 创建预处理步骤
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())])

categorical_transformer = Pipeline(steps=[    
('imputer', SimpleImputer(strategy='constant', fill_value='missing')), 
('onehot', OneHotEncoder(handle_unknown='ignore'))])
# 使用ColumnTransformer来应用这些转换
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),        ('cat', categorical_transformer, categorical_features)])

# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

特征选择

特征选择涉及决定使用哪些特征来训练模型。这一步骤可以减少模型的复杂性和过拟合的风险。

相关性分析

        使用相关系数矩阵来检查各个特征与目标变量(房价)之间的相关性,高度相关的特征可能对预测房价有更大的影响。例如,房屋面积对于房价的影响大于楼层对于房价的影响,即房屋面积比楼层更适合作为训练房价预测模型的特征。

特征重要性评估

        使用某些算法(如随机森林)可以评估不同特征的重要性。

根据特征重要性来选择最有影响的特征。

模型构建与训练

选择算法

        在这个案例中,由于其基于回归的性质以及线性回归模型的简单易学特点,开发者可以优先选择线性回归模型作为起点学习算法。线性回归是一个简单而直观的模型,适合初学者理解和实现,因此可作为探索机器学习领域的起点。随着对线性回归的熟悉和理解,开发者可以进一步探索和优化模型,拓展到更复杂的算法和技术领域。

模型训练

        一旦选择了合适的算法,接下来的关键步骤是使用训练数据来训练模型。这个过程涉及到调整模型的各种参数,例如学习率、正则化项等,以不断改善模型的性能和准确度。通过对训练数据的反复迭代学习,模型将逐渐优化,更好地拟合数据,从而使其能够对新数据做出更准确的预测。使用选定的特征来构建和训练模型。

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.pipeline import Pipeline

# 创建一个管道,结合预处理步骤和线性回归模型model =
Pipeline(steps=[('preprocessor', preprocessor),
                        ('regressor', LinearRegression())])

# 训练模型
model.fit(X_train, y_train)

# 进行预测
y_pred = model.predict(X_test)

# 评估模型
print("模型的均方误差: ", mean_squared_error(y_test, y_pred))

        这段代码使用Scikit-learn库构建了一个处理房价预测问题的线性回归模型。它首先通过预处理管道处理数值型和类别型特征,然后将处理后的数据用于训练线性回归模型,并对测试集进行预测,最后计算模型的均方误差以评估其性能。

下一节我们将进行监督学习的进阶探索

机器学习基础(三)监督学习的进阶探索-CSDN博客监督学习作为机器学习的一个主要分支,专注于从带有标签的数据中学习和建立预测模型。这些模型可以预测新数据的标签,广泛应用于各种行业和领域,从简单的邮件分类到复杂的医疗诊断。https://blog.csdn.net/qq_52213943/article/details/136173870?spm=1001.2014.3001.5501

-----------------

以上,欢迎点赞收藏、评论区交流

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j

文章目录 前言源码获取一、需求说明二、 调研pdf处理工具word处理工具 三、技术栈选择四、功能实现实现效果详细功能介绍详细代码实现项目目录WordUtilsMain类实现部分&#xff1a;第一部分Main类实现部分&#xff1a;第二部分Main类实现部分&#xff1a;第三部分 资料获取 前言…

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

Sora:新一代实时音视频通信框架

一、Sora简介 Sora是一个开源的实时音视频通信框架&#xff0c;旨在提供高效、稳定、可扩展的音视频通信解决方案。它基于WebRTC技术&#xff0c;支持跨平台、跨浏览器的实时音视频通信&#xff0c;并且具备低延迟、高并发、易集成等特点。 --点击进入Sora(一定要科学哦&#x…

爬虫学习笔记-scrapy爬取电影天堂(双层网址嵌套)

1.终端运行scrapy startproject movie,创建项目 2.接口查找 3.终端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,运行 scrapy genspider mv https://dy2018.com/ 4.打开mv,编写代码,爬取电影名和网址 5.用爬取的网址请求,使用meta属性传递name ,callback调用自定义的…

PyQt应用程序中的多线程:使用Qt还是Python线程?

多线程模块能够更加高效得完成任务&#xff0c;但是在PyQt 应用程序中实现多线程可以使用 Qt 的线程模块&#xff08;QThread&#xff09;或者 Python 的 threading 模块。两者各有优劣&#xff0c;具体选择取决于项目需求和个人偏好。下面我们将以案例来说明两种模块具体得优缺…

欠定方程组及其求解

欠定方程组是指方程的数量少于未知数的数量的方程组。在这种情况下&#xff0c;通常有无限多个解&#xff0c;因为给定的方程不足以唯一确定所有未知数的值。在某些情况下&#xff0c;我们可以利用额外的信息或假设&#xff0c;如稀疏性或其他约束&#xff0c;来找到一个合理的…

嵌入式 系统 开发 - 第一件事 “搭开发环境”

无论是对DSP&#xff0c;FPGA&#xff0c;或其他可编程芯片开发 都要 “搭开发环境” &#xff1a; 懒得写太多字&#xff0c;画个图来扯淡吧&#xff01; 看看实际 怎么搞的 &#xff1a;&#xff09; 这张照片仅仅是 老哥 自己的一个DSP开发实际连结的搞法儿啊&#xff0c…

【Docker】集群容器监控和统计 Portainer基本用法

Portainer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用川于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 主要功能&#xff1a;实现集群容器的监控和统计 下载安装 官网&#xff1a;https://www.portainer.io 文档&#xff1a;https://do…

移动通信相关知识学习笔记

一、移动通信架构简图 移动无线的接入网是专指各种基站设备。核心网就是各种交换机。 二、无线信号基本原理 无线网络中&#xff0c;使用AP设备和天线来实现有线和无线信号互相转换。如上图所示&#xff0c;有线网络侧的数据从AP设备的有线接口进入AP后&#xff0c;经AP处理为…

ElasticSearch之Index Template 和Dynamic Template

写在前面 在ElasticSearch之Mapping 一文中我们一起看了es的dynamic mapping机制&#xff0c;通过该机制允许我们不需要显式的定义mapping信息&#xff0c;而是es根据插入的文档值来自动生成 &#xff0c;比如插入如下的文档&#xff1a; {"firstName": "Chan…

MySQL Replication

0 序言 MySQL Replication 是 MySQL 中的一个功能&#xff0c;允许从一个 MySQL 数据库服务器&#xff08;称为主服务器或 master&#xff09;复制数据和数据库结构到另一个服务器&#xff08;称为从服务器或 slave&#xff09;。这种复制是异步的&#xff0c;意味着从服务器不…

cRIO9040中NI9381模块的测试

硬件准备 CompactRIO9040NI9381直流电源&#xff08;可调&#xff09;网线 软件安装 下载地址 LabVIEW Real-Time 模块 NI CompactRIO 设备驱动程序 LabVIEW FPGA 模块&#xff08;可选&#xff09; 仅以下情况需要LabVIEW FPGA模块&#xff1a; 想为CompactRIO终端设计FP…

数据结构之线性表插入与删除运算

线性表 线性表的定义 线性表&#xff0c;或称表&#xff0c;是一种非常灵便的结构&#xff0c;可以根据需要改变表的长度&#xff0c;也可以在表中任何位置对元素进行访问、插入或删除等操作。另外&#xff0c;还可以将多个表连接成一个表&#xff0c;或把一个表拆分成多个表…

【git 使用】超级好用的 git reset 和 git revert 功能对比和使用方法

首先你要知道 git 区分暂存区和工作区&#xff0c;如果你用过 sourcetree 你就会知道 git reset 超级好用 git reset 命令用于将当前分支的 HEAD 指针移动到指定的提交&#xff0c;并且可以选择性地修改工作区和暂存区的状态。git reset 命令有几种常用的用法&#xff0c;主要…

【conda环境 安装 tensorflow2.2】 解决方案

1.检查anaconda安装&#xff1a;在cmd输入 conda --version 2.检测已经安装的环境&#xff1a;conda info --envs 3.新建一个python3.5的环境&#xff0c;tensorflow&#xff1a; ###conda create -n xxx python3.5 xxx为虚拟环境名 ###conda create -n xxx python3.6 xxx为虚拟…

VO、DTO、DO、BO、PO

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 VO、DTO、DO、BO1.概念阿里Java开发手册分层领域模型&#xff1a; 2. VO 和 DTO 使用场景以下是一个使用VO和DTO的典型案例&#xff1a; 3.BO和DTO的区别 案例 VO、…

【SpringBoot3】Spring Security 常用注解

注&#xff1a;本文基于Spring Boot 3.2.1 以及 Spring Security 6.2.1 Spring Security 6 的常用注解包括以下几种&#xff0c;通过这些注解可以更加方便的控制资源权限。 Secured &#xff1a;方法执行前检查&#xff0c;直接判断有没有对应的角色PreAuthorize&#xff1a;方…

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序

什么是约瑟夫环问题&#xff1f; 约瑟夫问题是个有名的问题&#xff1a;N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被杀掉&#xff0c;最后剩下一个&#xff0c;其余人都将被杀掉。例如N6&#xff0c;M5&#xff0c;被杀掉的顺序是&#xff1a;5&#xff…

tkinter做一个秒表

文章目录 需求和框架布局和主流程计时函数 需求和框架 本文试图实现一个简单的秒表&#xff0c;内容如下 这个软件非常简单&#xff0c;其UI元素只有一个文字标签外加三个按钮&#xff0c;这三个按钮的功能如下 点击Start按钮&#xff0c;开始进行计时&#xff0c;同时Start变…

已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况&#xff1a; 可以看到 userMapper 下有个红色的波浪警告&#xff0c;虽然代码没有任何问题&#xff0c;能正常运行&#xff0c;但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找&#xff0c;最终明白了原因…