人工智能之机器学习(初步应用部分)数据集、特征工程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- scikit-learn工具介绍
- 数据集(重点介绍和了解)
- sklearn玩具数据集介绍
- sklearn现实世界数据集介绍
- sklearn加载玩具数据集
- 数据集总结
- **重要属性**:
- 掌握薄弱点
- 特征工程
- 步骤
- 归一化minmaxscaler
- 标准化Standarscaler
- DictVectorizer 字典列表特征提取
- 三元矩阵
- CountVectorizer 文本特征提取
- TfidfVectorizer TF-IDF文本特征词的重要程度提取
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
scikit-learn工具介绍
首先是使用python编译器的转变,今天学习中使用的是VSCode。
这里使用到的新的虚拟库命名为sklearn。
数据集(重点介绍和了解)
sklearn玩具数据集介绍
数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取。
首先我们要明白"玩具数据的意义“:“玩具数据集”通常是指那些设计用于教学、测试算法或演示目的的小型、简单的数据集。这些数据集往往具有清晰的结构和标签,使得它们非常适合用来快速理解和实验不同的机器学习模型,而不需要处理真实世界数据集中常见的复杂性和噪声。
采用的函数为(load)
sklearn现实世界数据集介绍
数据量大,数据只能通过网络获取(fetch)
sklearn加载玩具数据集
from sklearn.datasets import load_iris#这个函数是加载玩具数据
iris = load_iris()#使用load_iris()函数来加载lris数据集
#print(iris.data)#数据(特征数据)
print(iris.data.shape)#数据维度
print(iris.feature_names)#特征名称
print(iris.target)#标签(目标) 数组
print(iris.target.shape)
print(iris.target_names)#列表 包含目标标签的名称
这里不放完iris.data数据打印全部的结果,这里的就是有关特征数据。
每一行有一个样本,包含4个特征值。
数据形状采用(iris.data.shape) 打印出来150个样本,每个样本有4个特征
lirs.feature_names 表示每个样本的4个特征的名称
[‘sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’, ‘petal width (cm)’]
iris.feature_names 特征名称:
sepal length (cm):花萼长度(厘米)
sepal width (cm):花萼宽度(厘米)
petal length (cm):花瓣长度(厘米)
petal width (cm):花瓣宽度(厘米)
目的标签:每个样本的类别标签,共有 3 个类别,分别用 0、1 和 2 表示。
0、1 和 2 是 Iris 数据集中目标标签的整数编码,用于表示不同的类别。
0:表示样本属于 Iris-setosa 类别。
1:表示样本属于 Iris-versicolor 类别。
2:表示样本属于 Iris-virginica 类别。
数据集总结
对于数据集从我的学习过程中感受到的是sklearn.learn中有相关的小型数据(玩具数据)
通过调用例如鸢尾花、例如调用红酒数据from klearn.datasets import load_iris、from sklearn.datasets import =load_wine
总结而言就是先把相关库导入进来,然后进行数据的初始化举例红酒:wine=load_wine
重要属性:
1、data 特征
2、feature_names 特征描述
3、target 目标
4、target_names 目标描述
5、DESCR数据集的描述
6、filename 下到本地保存后的文件名
掌握薄弱点
1、在初次学习中遇到对于csv文件的保存,打开计事本,写出如下数据,数据之间使用英文下的逗号, 保存文件后把后缀名改为csv
2、函数集划分需要背住的方式,from sklearn.model_selection import train_test_split
特征工程
所谓特征工程就是把对特征进行相关的处理
使用的库采用pandas进行清洗和数据处理和sklearn来进行特征工程。
步骤
1、特征提取,如果不是dataframe类似的数据,要进行特征提取,如字典提取,文本特征提取。
2、无量纲化
归一化minmaxscaler
作为数学原理需要知道处理方式,作为实际意义
需要提到的是作为数学原理中,分母采用Xmax-Xmin,每种特征中的最小值和最大值,分子采用X(当前值,𝑥scaled 是归一化后的特征值)减去Xmin值(特征值)
由于归一化默认值在(0,1)之间,要缩放到其他区间,可以使用公式:x=x*(max-min)+min;
举例:
一个-10的点和一个20的点,转化为这种形式就是x=x*30+(-10)为值域范围。
归一化中还有normalize作为一种处理方式,L2指的是欧式距离,L1指的是曼哈顿距离,这里是拓展了一下具体的我也没能搞懂怎么去使用API
minmaxscaler的API使用方式为:
from sklearn.preporcessing import MinmaxScaler 作为调用库。
需要提到的是由于遇到最大值和最小值有较大差距的时候鲁棒性较差,总体数据容易受到波动。
标准化Standarscaler
首先提到它的数学原理为标准化方法是Z-score标准化,也称为零均值标准化。它通过对每个特征的值减去其均值,再除以其标准差,将数据转换为均值为0,标准差为1的分布。这可以通过以下公式计算:
首先
z为转换后的值,x为原始数据的值,μ为该特征的均值,σ为该特征的标准差。
而μ为特征的数值相加的和除以个数
σ为下标所对应的1、2、3、4、5…i减掉均值的差平方除以个数再开平方
我所理解的是通过均值,把每个数字之前的差距减少了,在通过标准差,进行更进一步的规范,到最后的结果x减去均值除以标准差就为最后的转换值
使用的API为from sklearn.preprocessing import StandarScaler 进行转换
这里特别注意的是归一化基本在默认值范围内都为(0,1)
而标准化可以超过1或者为负数。
DictVectorizer 字典列表特征提取
首先引入一个概念,稀疏矩阵。一个矩阵中大部分为0,只有少数元素是非0的矩阵。当在一个矩阵的非零元素数量远小于总的元素数量,且非零元素分布没有明显的规律时候,这样的矩阵被认为是稀疏矩阵。
三元矩阵
三元矩阵是一种稀疏矩阵类型数据,存储非零元素的行索引,列索引和值。
分为三列,行、列、数值。
在具体运用中
from sklearn.feature_extraction import DictVectorize
而数据中存在字典例如
1、提取为稀疏矩阵对应的数组
创建DictVectorizer对象中
transfer=DictVectorizer(sparse=False)
当sparese=False的时候则data_new的数据类型为ndarray
2、提取为稀疏矩阵
如果当transfer=DictVectorizer(sparse=True)
data_new=transfer.fit_transform(data)
再进行
transfer.get_feature_names_out()
在将数据通过toarray()进行转化。
CountVectorizer 文本特征提取
文本分为英文文本和中文文本提取
要导入pandas库进行数据预处理
使用的库为from sklearn.feature_extraction.text import CountVectorizer
如果选用中文文本进行提取
先导入pandas库
from sklearn.feature_extraction.text import CountVectorizer 进行提取
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
data=["stu is well, stu is great", "You like stu"]
#创建转换器对象, you和is不提取
transfer = CountVectorizer(stop_words=["you","is"])
#进行提取,得到稀疏矩阵
data_new = transfer.fit_transform(data)
print(data_new)
import pandas
pandas.DataFrame(data_new.toarray(),
index=["第一个句子","第二个句子"],
columns=transfer.get_feature_names_out())
进行中文文本提取
首先下载jieba组件,使用jieba函数封装一个函数。
TfidfVectorizer TF-IDF文本特征词的重要程度提取
import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
def cut_words(text):
return " ".join(list(jieba.cut(text)))
data = ["教育学会会长期间,坚定支持民办教育事业!", "扶持民办,学校发展事业","事业做出重大贡献!"]
data_new = [cut_words(v) for v in data]
transfer = TfidfVectorizer(stop_words=['期间', '做出',"重大贡献"])
data_final = transfer.fit_transform(data_new)
pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())
CountVectorizer
功能:
CountVectorizer 将文本数据转换为词频矩阵,即每个词在文档中出现的次数。
它生成一个稀疏矩阵,其中每一行代表一个文档,每一列代表一个词汇表中的词,矩阵中的值表示该词在对应文档中出现的次数。
使用场景:
当你需要简单地统计词频,而不需要考虑词的重要性时,可以使用 CountVectorizer。
适用于简单的文本分类任务、主题建模等。
TfidfVectorizer
功能:
TfidfVectorizer 不仅考虑词频(Term Frequency, TF),还考虑了逆文档频率(Inverse Document Frequency, IDF)。
TF-IDF 值反映了词在文档中的重要性,具体计算公式为:TF-IDF = TF * IDF。
TF(Term Frequency):词在文档中出现的频率。
使用场景:
当你需要考虑词的重要性,特别是在处理大规模文本数据时,TfidfVectorizer 更加有效。
适用于文本分类、信息检索、关键词提取等任务。
矩阵内容:
CountVectorizer 的矩阵中的值是整数,表示每个词在文档中出现的次数。
TfidfVectorizer 的矩阵中的值是浮点数,表示每个词在文档中的TF-IDF值。这些值不仅反映了词频,还考虑了词在整个文档集合中的重要性。