机器学习——数据处理

news2025/2/23 6:04:16

机器学习简介

  • 机器学习是人工智能的一个实现途径
  • 深度学习是机器学习的一个方法发展而来 

机器学习:从数据中自动分析获得模型,并利用模型对未知数据进行预测。 

数据集的格式:  

特征值+目标值

比如上图中房子的各种属性是特征值,然后房屋价格是目标值。

注:

  • 对于每一行数据我们可以称之为样本
  • 有些数据集可以没有目标值——聚类

深度学习机器学习的关系:

深度学习是使用深度神经网络的机器学习。

——机器学习里面有种结构叫神经网络,神经网络多层的就叫深度学习,深度就是多层次的意思。

机器学习算法分类:

有目标值-监督学习

                目标值是类别(如猫、狗)——分类问题

                目标值是连续型的数据(如房屋价格)——回归问题

无目标值-无监督学习

机器学习开发流程:

数据集的使用

常用数据集有sklearn、kaggle和UCI,这里以sklearn举例 :

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split


def datasets_demo():
    # 获取数据集
    iris = load_iris()  # load获取小规模数据集,fetch获取大规模数据集
    print("鸢尾花数据集:\n", iris)
    print("查看数据集描述:\n", iris.DESCR)  # 除了 .属性 的方式也可以用字典键值对的方式 iris["DESCR"]
    print("查看特征值的名称:\n", iris.feature_names)
    print("查看特征值:\n", iris.data, iris.data.shape)

    # 数据集划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    # 四个x、y分别是训练集特征值,测试集特征值,训练集目标集和测试集目标集,这同时也是这个API的返回值的顺序
    # test_size为测试集大小(float),默认是0.25,将大多的数据用于训练,测试集一般占20~30%,用于模型评估
    # 伪随机,random_state是随机数种子(不同的种子会造成不同的随机采样结果,相同的种子采样结果相同),如果后面要比较不同算法的优劣,那么数据划分方式要一样,即随机数种子一样以控制变量
    print("训练集的特征值:\n", x_train, x_train.shape)

    return None


if __name__ == "__main__":
    datasets_demo()

特征工程

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上更好的作用的过程。

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

特征提取: 

将任意数据(文本或图像)转换为可用于机器学习的数字特征。

特征值化是为了让计算机更好的去理解数据。

  • 字典特征提取(特征离散化)
  • 文本特征提取
  • 图像特征提取(深度学习再介绍) 

矩阵 matrix 二维数组

向量 vector 一维数组

类别——> one-hot编码(即独热编码)

如果将类别直接表示成数字,那么数字有大小会误将类别也分大小,为了使各类别公平,让几个类别就几个位置,是这个类别就置1,不是就置0,即one-hot编码处理。

字典特征提取 

from sklearn.feature_extraction import DictVectorizer


def dict_demo():
    data = [{'city': '北京', 'temperature': 10}, {'city': '上海', 'temperature': 15}, {'city': '深圳', 'temperature': 20}]
    # 实例化一个转换器类
    transfer = DictVectorizer(sparse=False) # 默认返回sparse稀疏矩阵(只将非零值按位置表示出来,节省内存,提高加载效率)
    # 调用fit_transform(),实现数据转换
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    print("特征名字:\n", transfer.get_feature_names_out())

    return None


if __name__ == "__main__":
    dict_demo()

文本特征提取

英文特征提取样例:

from sklearn.feature_extraction.text import CountVectorizer


def count_demo():
    data = ["I like C++,C++ like me", "I like python,python also like me"]  # 一般以单词作为特征,会忽略单个字母的单词
    # 如果是中文则还需要分词将词语隔开(按空格识别),如data = ["我 爱 中国"],同样也会忽略单个中文字

    # 实例化一个转换器类
    transfer = CountVectorizer()  # CountVectorizer(),统计每个样本特征词出现的个数,没有sparse=False这个参数
    # 如果transfer = CountVectorizer(stop_words=["also","me"])意为特征词里去掉also、me这些词,表示这些词不适合作特征

    # 调用fit_transform(),实现数据转换
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())  # 用toarray方法等效于sparse=False
    print("特征词:\n", transfer.get_feature_names_out())

    return None


if __name__ == "__main__":
    count_demo()

中文特征提取样例:

from sklearn.feature_extraction.text import CountVectorizer
import jieba


def cut_word(text):
    return " ".join(list(jieba.cut(text)))  # 先转成list列表再转成字符串,jieba是中文分词组件


def count_demo():
    data = ["我爱广东", "我爱中国"]
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # 实例化一个转换器类
    transfer = CountVectorizer()

    # 调用fit_transform(),实现数据转换
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())  # 用toarray方法等效于sparse=False
    print("特征词:\n", transfer.get_feature_names_out())

    return None


if __name__ == "__main__":
    jieba.setLogLevel(jieba.logging.INFO)  # 去除报错
    count_demo()

关键词:在某一类别的文章中出现的次数很多,而在其他类别的文章中出现类别很少的词。

Tf-idf文本特征提取

  • TF-IDF的主要思想:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或短语具有很好的类别区分能力,适合用来分类。
  • TF-IDF的作用:用以评估一个词对于一个文件集或一个语料库中的其中一份文件的重要程度。

公式 

  • 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
  • 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到

        tfidf_{i,j}=tf_{i,j}{\times}idf_{i,j} 

最终得出结果可以理解为重要程度。 

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba


def cut_word(text):
    return " ".join(list(jieba.cut(text)))


def tfidf_demo():
    data = ["相遇,是一种美丽,像一座小城向晚,映着夕阳的绚烂。",
            "对执着的人来说,最难莫过于放弃,在间断间续的挣扎中,感谢时间的治愈。",
            "过去无法重写,但它却让我更加坚强。感谢每一次改变,每一次心碎,每一块伤疤。"]
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # 实例化一个转换器类
    transfer = TfidfVectorizer()

    # 调用fit_transform(),实现数据转换
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征词:\n", transfer.get_feature_names_out())

    return None


if __name__ == "__main__":
    jieba.setLogLevel(jieba.logging.INFO)  # 去除报错
    tfidf_demo()

特征预处理 

通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 。

数值型数据的无量纲化

  • 归一化
  • 标准化

为什么要进行归一化/标准化?

特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标 结果,使得一些算法无法学习到其他特征。

测试数据(data.txt):

height,weight,sex
178,60,1
173,60,2
180,65,1
182,70,1
168,55,2

归一化 

通过对原始数据进行变换把数据映射到(默认为[0,1])之间。

x^{'}=\frac{x-min}{max-min}                               x^{''}=x^{'}*(mx-mi)+mi 

作用于每一列,max为一列的最大值,min为一列的最小值,mxmi分别为指定区间值,默认mx为1,mi为0,x^{''}为最终结果。

from sklearn.preprocessing import MinMaxScaler
import pandas as pd


def minmax_demo():
    # 读取数据
    data = pd.read_csv("data.txt")
    data = data.iloc[:, :2]  # 提取所需数据,行全部都要,列要前两列
    print("data:\n", data)

    # 实例化一个转换器类
    transfer = MinMaxScaler()  # 默认是transfer = MinMaxScaler(feature_range=(0,1))即区间[0,1]

    # 调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None


if __name__ == "__main__":
    minmax_demo()

如果最大值/最小值刚好是异常值,那么归一化的结果就不准确,这种方法鲁棒性较差,只适用于传统精确小数据场景。 

标准化 

通过对原始数据进行变换,把数据变换到均值为0,标准差为1的范围里。

x^{'}=\frac{x-\bar{x}}{\sigma }

\bar{x}为均值,\sigma为标准差 。

如果数据量较大,少量的异常值对均值和标准差的影响均很小。 

from sklearn.preprocessing import StandardScaler
import pandas as pd


def stand_demo():
    # 读取数据
    data = pd.read_csv("data.txt")
    data = data.iloc[:, :2]  
    print("data:\n", data)

    # 实例化一个转换器类
    transfer = StandardScaler()

    # 调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None


if __name__ == "__main__":
    stand_demo()

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

特征降维 

降维是指在某些限定条件下,降低随机变量(特征个数,得到一组“不相关”主变量(特征与特征之间不相关)的过程。 

特征太多会造成数据的冗余,故需降维,而在训练都是用特征进行学习,如果特征之间相关性较强,会对算法的结果影响较大,相关的特征比如相对湿度与降雨量。

特征选择 

Filter过滤式

  • 方差选择法
  • 相关系数

Embeded嵌入式

  • 决策树
  • 正则化
  • 深度学习 

方差选择法:低方差特征过滤

  • 特征方差小:某个特征大多样本的值比较相近——如鸟是否有爪子这个特征,方差为0,去除
  • 特征方差大:某个特征很多样本的值都有差别——保留
from sklearn.feature_selection import VarianceThreshold
import pandas as pd


def variance_demo():
    # 读取数据
    data = pd.read_csv("data.txt")
    print("data:\n", data)

    # 实例化一个转换器类
    transfer = VarianceThreshold(threshold=1)  # 表示方差小于threshold的特征都会被删掉(阈值),默认threshold=0

    # 调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None


if __name__ == "__main__":
    variance_demo()

相关系数

举例:皮尔逊相关系数——适用于连续型数据

r=\frac{n\sum xy-\sum x\sum y}{\sqrt{n\sum x^{2}-(\sum x)^{2}}\sqrt{n\sum y^{2}-(\sum y)^{2}}}

其中,-1\leqslant r\leqslant 1,性质如下:

from scipy.stats import pearsonr
import pandas as pd


def pearsonr_demo():
    # 读取数据
    data = pd.read_csv("data.txt")
    print("data:\n", data)

    # 计算两个变量之间的皮尔逊相关系数
    r = pearsonr(data["height"], data["weight"])
    print("相关系数:\n", r)  # 第一个为相关系数,第二个为相关系数显著性,p值越小表示相关系数越显著

    return None


if __name__ == "__main__":
    pearsonr_demo()

主成分分析(PCA)

  • 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量。
  • 作用:是数据维度压缩,用损失少量信息(尽可能保留更多的信息)的代价尽可能降低原数据的维度(复杂度)。
from sklearn.decomposition import PCA


def pca_demo():
    # 读取数据
    data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]

    # 实例化一个转换器类
    transfer = PCA(n_components=2) # n_components如果传的是整数就代表降为几个特征(降为几维),如果传的是小数就代表要保留百分之几的信息

    # 调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None


if __name__ == "__main__":
    pca_demo()

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

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

相关文章

数据结构——哈希表相关题目

数据结构——哈希表相关题目242. 有效的字母异位词1.暴力解法2.排序后比较3.哈希表383. 赎金信哈希解法49. 字母异位词分组438. 找到字符串中所有字母异位词3. 无重复字符的最长子串76. 最小覆盖子串349. 两个数组的交集1.排序双指针2.哈希表350. 两个数组的交集 II1.排序双指针…

C++缺省参数详解

在C中,我们经常需要定义函数并给它们传递一些参数。有时候,某些参数的值是不经常改变或者只有特殊情况下才需要指定,这时候我们可以用缺省参数来简化代码。 什么是缺省参数? 缺省参数是声明或定义函数时为函数的参数指定一个缺省…

javascript 中使用 ActiveMQ

javascript 中使用 ActiveMQ 1. 参考文档 https://www.eclipse.org/paho/files/jsdoc/index.html 2. html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" con…

SpringBoot——短信发送、手机验证码登录

目录 一、短信发送 1.1 阿里云短信服务 1.1.1 设置短信签名 1.1.2 模板管理 1.1.3 设置AccessKey 1.2 短信发送——代码开发 1.2.1 导入maven坐标 1.2.2 调用API 1.2 手机验证码登录 1.2.1 用户数据库表 1.2.2 修改过滤器 1.2.3 随机生成验证码的工具类 1.2.4 手机验证码登…

【Linux系统查找错误单词项目和vim的三种模式(命令,输入和底线命令模式)和项目的心得体会】

查找文章中拼写错误的单词的C语言程序 编写的C语言程序&#xff1a; #include<stdio.h> #include<string.h> int main() { FILE *fpfopen("essay.txt","r"); FILE *fp1fopen("words.txt","r"); if(fpNULL&&fp1NU…

CorelDRAW 2022矢量图形制作排版软件图文安装教程

CorelDRAW 2022是一款矢量图形制作和排版软件&#xff0c;做为目前图形设计类软件的领航者&#xff0c;CorelDRAW不断在每个新版本中完善功能&#xff0c;突破自我&#xff0c;并且广泛应用于印刷、出版、平面设计制作、包装设计&#xff0c;工业设计&#xff0c;以及服装设计裁…

学会这10款AI绘画工具,你也可以成为插画师

有些人担心人工智能绘画工具会取代插画师&#xff0c;但与其害怕&#xff0c;不如拥抱新技术&#xff01; 跟随本文了解和掌握新技术。如果你是插画师&#xff0c;以下五个人工智能绘画网站是必要的&#xff1a;「即时AI」&#xff0c;Lexica&#xff0c;DALLLeonardo和Scribb…

C++中文件操作与文件流

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

Flink SQL 在美团实时数仓中的增强与实践

01 Flink SQL 在美团 目前 Flink SQL 在美团已有 100业务方接入使用&#xff0c;SQL 作业数也已达到了 5000&#xff0c;在整个 Flink 作业中占比 35%&#xff0c;同比增速达到了 115%。 SQL 作业的快速增长给我们带来了许多新的问题和挑战&#xff0c;主要包括以下几点&#…

CTR-GCN 论文解读

论文名称&#xff1a;Channel-wise Topology Refinement Graph Convolution for Skeleton-Based Action Recognition论文下载&#xff1a;https://arxiv.org/pdf/2107.12213.pdf论文代码&#xff1a;https://github.com/Uason-Chen/CTR-GCN CTR-GCN 是中科院自动化所发表在 IC…

项目二,easyx的加入

今天是项目的第二天 与昨天的迷离比起来今天大大的有进步 我对实现啥的功能有了一个基本的方案 1对所有路的查询那就是用dfs 2对最短路的查询就是用的floyed但是,查询是要保存路径的,所以想到了,保存每条最短路的时候 同时把最短路的前驱保存下来,我们可以通过前驱把完整的…

InnoDB中索引的实现

B树索引的使用 5.6.1 不同应用中B树索引的使用 在OLTP应用中&#xff0c;查询操作只从数据库中取得一小部分数据&#xff0c;一般可能都在10条记录以下&#xff0c;甚至在很多时候只取1条记录&#xff0c;如根据主键值来取得用户信息&#xff0c;根据订单号取得订单的详细信息…

Linux下最小化安装CentOS-7.6(保姆级)

文章目录安装包开始安装一、 新建一个虚拟机二、配置安装CentOS7.6二、开始安装CentOS三、配置CentOS并下载基本信息安装包 链接&#xff1a;https://pan.baidu.com/s/1DodB-kDy1yiNQ7B5IxwYyg 提取码&#xff1a;p19i 开始安装 一、 新建一个虚拟机 1、 打开VMWare&#x…

UVCCamera 源码解析

本文将通过UVCCamera源码研究 概述相机传感器数据采集至USB数据传输整个过程 下载源码配置调试环境 git clone GitHub - saki4510t/UVCCamera: library and sample to access to UVC web camera on non-rooted Android device 注释调原有 ndk-build编译方式 //tasks.with…

使用 /permissive- 编译器开关时变量名or被识别为关键字

使用 /permissive- 编译器开关时变量名被识别为关键字 VS2022已经默认开启对c14的支持。并且&#xff0c;一般同时开启的还有/permissive-开关。项目属性如下所示&#xff1a; 然而&#xff0c;在许多早期代码中&#xff0c;函数名和变量名使用了c14等新标准中的关键字&#…

德国访问学者申请签证事宜

德国访问学者长期签证所需材料,下面就随知识人网小编一起看一看。 1、护照及复印件两份。 2、申请表附加表两份(里面有好多注意事项&#xff0c;最重要的是用德文填写&#xff0c;当时我就谷歌翻译后写上去的&#xff0c;最后附加表上的地点&#xff0c;有好多人问填办大使馆还…

谷歌seo快速排名优化方法,谷歌seo需要哪些技术手段?

谷歌seo快速排名优化方法怎么做&#xff1f; 答案是&#xff1a;利用GLB推广技术可以实现谷歌快速排名。 具体请阅读&#xff1a;什么叫GLB外推&#xff1f; 你只想快速曝光你的企业品牌&#xff0c;GLB外推技术是一个不错的选择。 但如果你想优化自己的外贸官网&#xff0…

【springcloud】服务熔断——Hystrix

官方资料&#xff1a;Home Netflix/Hystrix Wiki GitHub 服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其他的微服务&#xff0c;这就是所谓的“扇出”&#xff0c;如果扇出的链路上某个微服务的调用响…

配置python的opencv环境

1、核心 opencv与numpy包的版本必须适配。核心包版本&#xff1a; numpy1.15.0 opencv4.1.0 2、创建opencv环境 (1)创建一个opencv的虚拟环境 conda create -n cv_python python3.6.0(2)激活虚拟环境 activate cv_python (3)安装numpy的1.15.0版本 pip install numpy1.1…

windows自定时间显示格式(将星期几调出来)

一般的情况下是不是显示星期几的 添加红色方框中的内容