黑马机器学习day1

news2024/10/7 4:32:38

1.sklearn数据集

sklearn.datasets

datasets.load_*()        获取小规模的数据集

datasets.fetch_*(data_home=None)        获取大规模数据集        函数的第一个参数是data_home,标识数据集下载目录,默认/scikit_learn_data/

1.1sklearn小数据集

sklearn.datasets.load_iris()

1.2sklearn大数据集

sklearn.datasets.fetch_20newsgroups(data_home=None) 

1.3数据集的返回值

datasets.base.Bunch(继承自字典)

disk["ket"] = values

bunch.key = valuse

from sklearn.datasets import load_iris

def datasets_demo():
    """
    sklearn数据集使用
    :return:
    """
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    print("查看数数据集描述:\n",iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值:\n", iris.data, iris.data.shape)
    return None

if __name__ == "__main__":
    #sklearn数据集的使用
    datasets_demo()

data:特征数据数组,是[n_samples * n_features]的二维numpy.ndarry数组
target:标签数组,是n_samples的一维numpy.ndarry数组
DESCR:数据描述
feature_names:特征名,新闻数据,手写数字、回归数据集没有
target_names:标签名

1.4.数据集的划分

训练数据:用于训练,构建模型

测试数据:在模型检验时使用,用于评估模型是否有效

        测试集 20%~30%

数据集划分api

sklearn.model_selection.train_test_split(arrays, *options)

x 数据集的特征值
y 数据集的标签值
test_size测试集的大小,一般为float
random_state随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同
return训练集特征值,测试集特征值,训练集目标值,测试集目标值

return      x_train,       x_test,                 y_train,           y_test

from sklearn.model_selection import train_test_split


    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, train_size = 0.2, random_state = 22)
    print("训练集的特征值:\n",x_test,x_test.shape)

2.特征工程介绍

算法 特征工程

pandas 数据清洗,数据处理

sklearn 特征工程

2.1特征抽取/特征提取

sklearn.feature_extraction

机器学习算法 - 统计方法 - 数学公式

文本类型 - > 数值

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

字典特征提取(特征离散化)

文本特征提取

图像特征提取(深度学习再介绍)

2.1.1字典特征提取

字典特征提取 - 类别 -> one -hot编码

作用:对字典数据进行特征值化

sklearn.feature_extraction.DictVectorizer(sparse=True, …)

vector 数学:向量         物理:矢量

矩阵 matrix 二位数字

向量 vector 一维数组

父类:转换器类

返回sparse矩阵(sparse稀疏)将非零值 按位置表示出来

                                                   节省内存 提高加载效率

DictVectorizer.fit_transform(X), X:字典或者包含字典的迭代器返回值,返回sparse矩阵
DictVectorizer.inverse_transform(X), X:array数组或者sparse矩阵 返回值:转换之前数据格式
DictVectorizer.get_feature_names_out():返回类别名称(新版)

 

from sklearn.feature_extraction import DictVectorizer


def dict_demo():
    """
    字典特征抽取
    :return:
    """
    data = [{'city':'北京', 'temperature':100},
            {'city':'上海', 'temperature':60},
            {'city':'深圳', 'temperature':30}]
    # 1.实例化一个转换器类
    transfer = DictVectorizer(sparse=False)

    # 2、调用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__":

    # 代码2:字典特征抽取
    dict_demo()

2.1.2字典提取应用场景:

        1.pclass,sex 数据集当中类别特征比较多

                1.将数据集的特征 -> 字典类型

                2.DictVectorizer转换

        2。本身拿到的数据就是字典类型

2.2文本特征提取

单词作为特征

句子,短语,单词,字母

特征:特征词

方法1:CountVectorizer 统计样本特征词出现的个数

        stop_words停用的

        关键词:在某一个类别的文章出现的次数很多,但是在其他类别的文章出现的次数少

sklearn.feature_extraction.text.CountVectorizer(stop_words=[]):返回词频矩阵

CountVectorizer.fit_transform(X),X:文本或者包含文本字符串的可迭代对象,返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X),X:array数组或者sparse矩阵,返回值:转换之前数据格
CountVectorizer.get_feature_names_out():返回值:单词列表

 

from sklearn.feature_extraction.text import CountVectorizer

def count_demo():
    """
    文本特征抽取:CountVectorizer
    :return:
    """
    data = ['life is short,i like like python',
            'life is too long,i dislike python']
    # 1、实例化一个转换器类
    transfer = CountVectorizer()
    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names_out())

    return None
if __name__ == "__main__":
    #代码3: 文本的特征抽取:CountVectorizer
    count_demo()

中文:不支持单个中字

def count_chinese_demo():
    """
    中文文本特征抽取:CountVectorizer
    :return:
    """
    data = ['我 爱 北京 天安门',
            '天安门 上 太阳 升']
    # 1、实例化一个转换器类
    transfer = CountVectorizer()
    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names_out())

    return None
if __name__ == "__main__":
    # 代码4: 中文文本特征抽取:CountVectorizer
    count_chinese_demo()

中字分割

def cut_word(text):
    """
    进行中文分词:”我爱北京天安门“->”我 爱 北京 天安门“
    :param text:
    :return:
    """

    return " ".join(list(jieba.cut(text)))

def count_chinese_demo2():
    """
    中文本特征抽取,自动分词
    :return:
    """
    # 1.将中文文本进行分词
    data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',
            '我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',
            '如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)

    # 2、实例化一个转换器类
    transfer = CountVectorizer()
    # 3、调用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__":

    #代码5 中文本特征抽取,自动分词
    count_chinese_demo2()

    # 代码6:中文分词
    # print(cut_word("我爱北京天安门"))

方法2.TfidfVectorizer

Tf-idf  - 衡量一个词的重要程度

两个词 “经济” “肥肠” 

TF - 词频(term fequency ,tf)

IDF - 逆向文档频率

from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba

def tfidf_demo():
    """
    用TF-IDF的方法进行文本特征抽取
    :return:
    """
    data = ['一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。',
            '我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。',
            '如果只用一种方式了解某件事物,他就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。']
    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)

    # 2、实例化一个转换器类
    transfer = TfidfVectorizer(stop_words=["一种","所以"])
    # 3、调用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__":

    #代码7 用TF-IDF的方法进行文本特征抽取
    tfidf_demo()

3.特征预处理 

什么是特征预处理:通过一些转换函数,将特征数据转换成更适合算法模型的特征数据的过程

为什么要进行归一化/标准化:特征的单位或者大小相差较大,或者某特征的方法相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征

3.1归一化

 sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)…)
MinMaxScaler.fit_transform(X),

X:numpy array格式的数据[n_samples,n_features],

返回值:转换后的形式相同的array

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

def minmax_demo():
    """
    归一化
    :return:
    """
    #1.获取数据
    data = pd.read_csv("D:\PyCharm\heima\dating.txt")
    # print("data:\n", data)
    data = data.iloc[:,:3]
    print("data:\n", data)

    #2.实例化一个转换器类
    transfer = MinMaxScaler()

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

    return None

if __name__ == "__main__":
    minmax_demo()

结果 

 异常值:最大值或者最小值

注意最大值最小值是变化的,另外,最大值与最小值非常容易受到异常值影响,
所以这种方法鲁棒性较差,只适合传统精确小数据场景

3.2标准化

在这里插入图片描述

  • 对于归一化来说:如果出现异常点,影响了最大值和最小值,name结果显然会发生改变
  • 对于标准化来说,如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响不大,从而方差改变较小
  • 标准差:集中程度
  • 应用场景:在已有样本足够多的情况下比较稳定。适合现代嘈杂大数据场景

sklearn.perprocessing.StandradScaler()
处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为1
StandardScaler.fit_transform(X),

X;numpy array格式的数据[n_samples,n_features],

返回值:转化后的形状相同的array

import pandas as pd
from sklearn.preprocessing import StandardScaler


def stand_demo():
    """
    标准化
    :return:
    """
    #1.获取数据
    data = pd.read_csv("D:\PyCharm\heima\dating.txt")
    # print("data:\n", data)
    data = data.iloc[:,:3]
    print("data:\n", data)

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

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

    return None

if __name__ == "__main__":
    #标准化
    stand_demo()

4. 特征降维

ndarray

降低的对象是:二维数组。

降维就是在某些限定条件下,降低特征的个数,得到一组“不相关”主变量的过程

降维的两种方法:特征选择,主成分分析

4.1特征选择

定义:数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征

Filter(过滤式):方差选择法:低方差特征过滤

                              相关系数法-特征与特征之间的相关程度

Embedded(嵌入式):决策树,

                                       正则化,

                                       深度学习

4.1.1过滤式

模块

sklearn.feature_selection

低方差特征过滤

删除低方差的一些特征

  • 特征方差小:某个特征大多样本的值比较相近
  • 特征方差大:某个特征很多样本的值都有差别

sklearn.feature_selection.VArianceThreshold(threshold=0.0)
删除所有低方差特征
Variance.fit_transform(X),

X:numpy array格式的数据[m_sample,n_features],

返回值:训练集差异低于threadshold的特征将被删除。默认值是保留非零方差特征,即删除所有样本中具有相同值的特征
 

import pandas as pd

from sklearn.feature_selection import VarianceThreshold


def variance_demo():
    """
    低方差特征过滤
    :return:
    """
    # 1、获取数据
    data = pd.read_csv('factor_returns.csv')
    print('data:\n', data)
    data = data.iloc[:,1:-2]
    print('data:\n', data)

    # 2、实例化一个转换器类
    #transform = VarianceThreshold()
    transform = VarianceThreshold(threshold=5)

    # 3、调用fit_transform
    data_new = transform.fit_transform(data)
    print("data_new\n", data_new, data_new.shape)

    return None

if __name__ == "__main__":
    #过滤低方差特征
    variance_demo()

 4.1.2相关系数

皮尔逊相关系数(Pearson Correlation Coefficient):反映变量之间相关关系密切程度的统计指标

 在这里插入图片描述

相关系数的值介于-1与+1之间,即-1<=r<=+1。其性质如下:

当r>0时,表示两变量正相关;r<0时,两变量为负相关
当|r|=1时,表示两变量为完全相关;当r=0时,表示两变量间无相关关系
当0<|r|<1时,表示两变量存在一定程度的相关。且|r|越接近1,两变量间线性关系越密切;|r|越接近0,表示两变量的线性相关越弱
一般可按三级划分:|r|<0.4为低度相关;0.4<=|r|<0.7为显著相关;0.7<=|r|<1为高维线性相关
 

from scipy.stats import pearsonr

  • x:(N.)array_like
  • y:(N.)array_like Returns:(Perason’s correlation coefficient, p-value)
  • import pandas as pd
    
    from sklearn.feature_selection import VarianceThreshold
    from scipy.stats import pearsonr
    
    def variance_demo():
        """
        低方差特征过滤
        :return:
        """
        # 1、获取数据
        data = pd.read_csv('factor_returns.csv')
        print('data:\n', data)
        data = data.iloc[:,1:-2]
        print('data:\n', data)
    
        # 2、实例化一个转换器类
        #transform = VarianceThreshold()
        transform = VarianceThreshold(threshold=5)
    
        # 3、调用fit_transform
        data_new = transform.fit_transform(data)
        print("data_new\n", data_new, data_new.shape)
    
        #计算某两个变量之间的相关系数
        r1 = pearsonr(data["pe_ratio"],data["pb_ratio"])
        print("相关系数:\n", r1)
        r2 = pearsonr(data["revenue"],data['total_expense'])
        print("revenue和total_expense的相关性:\n", r2)
    
    
        return None
    
    if __name__ == "__main__":
        #过滤低方差特征
        variance_demo()
    

  • 特征与特征之间相关性很高:

    • 1选取其中一个

    • 加权求和

    • 主成分分析 

4.1.3主成分分析

定义:高维数据转换为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作用:是数据维数的压缩,尽可能降低原数据的维数(复杂度),损失少量信息
应用:回归分析或者聚类分析中

sklearn.decomposition.PCA(n_components=None)

将数据分解为较低维度空间
n_components:
小数:表示保留百分之多少的信息
整数:减少到多少特征
PCA.fit_transform(X),X:numpy array格式的数据[N_samples, n_features],

返回值:转换后指定维度的array

from sklearn.decomposition import PCA


def pca_demo():
    """
    PCA降维
    :return:
    """
    data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]
    #1.实例化一个转化器类
    transfer = PCA(n_components=0.95)
    #2.调用了fit_transfer
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    return None

if __name__ == "__main__":
    #PCA降维
    pca_demo()

保留95%

 5.案例

探究用户对物品类别的喜好细分

用户 user_id

物品类别 aisle

1)需要将user_id和aisle放在同一表中

2)找到user_id和aisle关系 - 交叉表和透视表

3)特征冗余过多 -> PCA降维

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

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

相关文章

无涯教程-Perl - fcntl函数

描述 该函数是系统fcntl()函数的Perl版本。使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含函数要使用的值,或者是任何返回信息的位置。 语法 以下是此函数的简单语法- fcntl FILEHANDLE, FUNCTION, SCALAR返回值 该函数返回0,但如果fcntl()的返回值为0,则返…

Vue2:组件高级(下)

Vue2&#xff1a;组件高级&#xff08;下&#xff09; Date: May 25, 2023 Sum: 自定义指令、插槽、商品列表、动态组件 目标&#xff1a; 自定义指令 基础概念&#xff1a; 概念&#xff1a; 内置指令&#xff1a;vue 官方提供了 v-for、v-model、v-if 等常用的内置指令。…

整数规划——第七章 分支定界算法

整数规划——第七章 分支定界算法 目前大部分整数规划商业软件如CPLEX&#xff0c;Gurobi和BARON等都是基于分枝定界算法框架的。 7.1 最优性条件和界 考虑下列一般线性整数规划问题&#xff1a; (IP) min ⁡ c T x , s . t . A x ≤ b , x ∈ Z n (7.1) \text{(IP)}\quad…

部署-打包并提交代码到Git服务器

前期准备工作 vue.config.js const { defineConfig } require(vue/cli-service) module.exports defineConfig({// 项目出Bug,点击错误可以跳到对应的位置&#xff0c;实际生成环境是不需要的 默认为trueproductionSourceMap: false,lintOnSave: false,publicPath: process.…

720度全视角!VR直播遇上法院庭审,你体验过吗?

在元宇宙发展背景之下&#xff0c;VR直播技术同样驶入了发展的快车道&#xff0c;以沉浸式、交互式体验为特点的VR技术&#xff0c;将原本就受欢迎的直播变得更加立体、真实、可靠&#xff0c;观众只需要一部手机就可以实现全方位、无死角地观看直播现场&#xff0c;体验宛如身…

小白带你学习linux的Redis基础(三十二)

目录 前言 一、概述 1、NoSQL 2、Redis 二、安装 1、基础配置 2、编译安装 3、RPM安装网络源安装 三、目录结构 1、rpm -ql redis 2、/etc/redis.conf 四、命令解析 1、redis-server 2、redis-cli 2、redis-check-rdb 3、redis-check-aof 五、redis登录更改 …

ES面试题

前言 1、面试突击正确的学习姿势 老师在给你讲面试突击的时候&#xff0c;是有课件的&#xff0c;而且是有准备的。你在面试的时候&#xff0c;是没有笔记课件的&#xff0c;而且问题是由面试官提问的&#xff0c;具有一定的随机性面试突击课程的目标不是听懂&#xff0c;而是…

文件上传漏洞(webshell)

一、防护 1、防护 1、判断文件后缀&#xff0c;为图片的话才让上传成功。 2、解析文件内容&#xff08;文件幻数&#xff09;判断文件头和文件尾部是否一致 幻数 常见的 3、隐藏按钮&#xff08;带上code唯一值&#xff09; 4、二次渲染&#xff08;类似拿着你的图片&#xff…

cannot import name ‘container_abcs‘ from ‘torch._six‘

进行模型训练的时候&#xff0c;报错&#xff1a; 原因是&#xff1a;torch1.8版本之后container_abcs被移除了&#xff0c;所以我们需要修改timm库中调用container_abcs的调用方式&#xff1a; timm库中调用container_abcs的文件是“~\Conda\envs\pytorch\Lib\site-packages\…

Java后台生成ECharts图片,并以Base64字符串返回

前言 通过echarts的jar包&#xff0c;Java后台生成一张图片&#xff0c;并把图片插入到word中。关于word插图片的代码在下一章。 需要用到的工具PhantomJS,Echarts-convert.js,jquery.js,echarts.js。 1.PhantomJS 介绍 PhantomJS是一个不需要浏览器的富客户端。 官方介绍&…

十年后的web渗透(网络安全)前景如何?你想知道的都在这里

前言 web渗透是网络安全大行业里入门板块&#xff0c;就像十年前的软件&#xff0c;前景非常被看好&#xff0c;薪资也很诱人。与软件测试和前端开发只需掌握一定的编程能力不同的是&#xff0c;渗透需要掌握的知识内容较多&#xff0c;花费的时间较长&#xff0c;渗透测试掌握…

值得苦练的100道Python经典练手题,(附详细答案)

嗨喽大家好卷子又来了&#xff0c;100道Python经典练手题奉上 花了一周的时间&#xff0c;整理了100道Python的练习题&#xff0c;如果你是一位初学者&#xff0c;那么这一份练习题将会给你带来极大的帮助&#xff0c;如果你能够完全独立的完成这份练习题&#xff0c;你已经入…

C/C++学习笔记 Vantage Point Trees的C++实现

下面代码是VP 树的 C 实现&#xff0c;递归search()函数决定是搜索左孩子、右孩子还是两个孩子。为了有效地维护结果列表&#xff0c;我们使用优先级队列。 // A VP-Tree implementation, by Steve Hanov. (steve.hanovgmail.com) // Released to the Public Domain // Based o…

【C++】开源:tinyxml2解析库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍tinyxml2解析库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…

路由器中DMZ、UPnP、Port Forwarding等功能介绍与使用

目录 一、DMZ功能1.1 概念1.2 验证测试方式 二、UPnP功能2.1 概念2.2 验证测试方法 三、Port Forwarding功能3.1 概念3.2 验证测试方法3.3 NAT相关 一、DMZ功能 1.1 概念 **DMZ&#xff08;Demilitarized Zone&#xff09;**是指位于防火墙内部网络&#xff08;LAN&#xff0…

Sentinel整合Spring Cloud Gateway、Zuul详解

Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 Sentinel 1.6.0 引入了 Sentinel API Gateway Adapter Common 模块&#xff0c;此模块中包含网关限流的规则和自定义 API 的实体和管理逻辑&#xff1a; GatewayFlowRule&#xff1a;网关限流规则…

公文校对要点:确保准确性和规范性

公文校对是确保文档准确性和规范性的重要步骤。以下是公文校对的要点&#xff1a; 1.拼写和语法检查&#xff1a;仔细检查文档中的拼写错误和语法错误。确保词语的正确拼写&#xff0c;并使用正确的语法结构和标点符号。 2.信息准确性&#xff1a;核对文档中的事实和数据&#…

AP51656 电流采样降压恒流驱动IC RGB PWM深度调光 LED电源驱动

产品描述 AP51656是一款连续电感电流导通模式的降压恒流源&#xff0c;用于驱动一颗或多颗串联LED 输入电压范围从 5 V 到 60V&#xff0c;输出电流 可达 1.5A 。根据不同的输入电压和 外部器件&#xff0c; 可以驱动高达数十瓦的 LED。 内置功率开关&#xff0c;采用电流采样…

Java ThreadPoolExecutor,Callable,Future,FutureTask 详解

目 录 一、ThreadPoolExecutor类讲解 1、线程池状态 五种状态 2、ThreadPoolExecutor构造函数 2.1&#xff09;线程池工作原理 2.2&#xff09;KeepAliveTime 2.3&#xff09;workQueue 任务队列 2.4&#xff09;threadFactory 2.5&#xff09;handler 拒绝策略 3、常…

递归在树的深度遍历中的运用

树的深度遍历 对于树这种数据结构&#xff0c;之前一直使用的是层次遍历&#xff0c;也就是广度优先搜索的方式&#xff08;BFS&#xff09;&#xff1b;对于树的遍历&#xff0c;还可以进行深度优先搜索&#xff08;DFS&#xff09;。 而结合递归&#xff0c;树的深度优先搜索…