人工智能机器学习-特征工程

特征工程

特征工程:就是对特征进行相关的处理

一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程

特征提取

稀疏矩阵

就是矩阵内含0量居多的矩阵,且零元素分布没有规律。

可以转换为三元数组

( ,)内为矩阵坐标,后面为数据

列出了有意义的,利于机器学习的数值,其余皆为0。

更利于储存。

稠密矩阵

跟稀疏矩阵相比,含零量较少或相等

具体使用:

导入from sklern.feature_extraction import DictVectorizer

DictVectorizer表示对字典列表的特征提取

在使用fit_transfrom转化前需要将字典数组转化为DictVectrizer对象

转换器对象:

(重要)fif_transfrom()函数

里面的参数为字典或者字典嵌套列表,返回值为转化后的矩阵或者数组

python 复制代码
#创建转换器对象
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'成都', 'age':30, 'temperature':200}, {'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
#创建DictVertorizer对象
transfer = DictVectorizer(sparse=False)
data_new = transfer.fit_transform(data)
print(data_new)

CountVectorizer 文本特征提取

英文文本提取

导入方法:

python 复制代码
from sklearn.feature_extranction.text import CountVectorizer

此处的文本提取,后面的单词为CoutVectotizer

同理;

先创建CoutVectotizer对象,用于转换的对象。

python 复制代码
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
import pandas as pd
data=["stu is well, stu is great", "You like stu"]
#创建CountVectorizer对象,[stop_word=[]]内的为不提取的值
transfer = CountVectorizer(stop_words=['you','is'])
#进行提取
data_new = transfer.fit_transform(data)
print(data_new)

同样使用fit_transfrom进行转化,得到一个三元数组。

中文文本提取

中文文本不像英文文本,中文文本文字之间没有空格,所以要先分词,一般使用jieba分词.

下载jieba组件, (不要使用conda)

python 复制代码
import jieba
from sklearn.feature_extraction.text import CountVectorizer
arr = list(jieba.cut('我爱别急天安门'))
#cut 使用jieba分词

使用jieba方法封装一个函数

python 复制代码
def cut(text):
    return " ".join(list(jieba.cut(text)))
    
data = "在如今的互联网世界,正能量正成为澎湃时代的大流量"
data = cut(data)
print(data)

TfidfVectorizer TF-IDF文本特征词的重要程度特征提取

词频(Term Frequency, TF), 表示一个词在当前篇文章中的重要性

逆文档频率(Inverse Document Frequency, IDF), 反映了词在整个文档集合中的稀有程度

计算公式;

代码与CountVectorizer的示例基本相同,仅仅把CountVectorizer改为TfidfVectorizer即可。

计算词频有两种方法:

1.原始词频,一个词在文档中出现的次数除以文档中总的次数

2.平滑后的词频,为了防止高频词主导向量空间,有时会对词频做平滑处理,例如1+log(TF)

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer,CountVectorizer
import numpy as np
import pandas as pd
import jieba
def cut(test):
    return ''.join(list(jieba.cut(test)))
data = ["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
data_1 = [cut(i) for i in data]
transfer = TfidfVectorizer(stop_words=['期间','做出'])#初始化一个转换器对象
data_new = transfer.fit_transform(data_1)#将对象转换成
# print(data_1)
print(data_new)
pd.DataFrame(data_new.toarray(), columns=transfer.get_feature_names_out())

上面的公式可以用函数方法表示

  • cut 函数使用 jieba 对输入文本进行分词,并将分词结果转换为字符串。

  • data_1 是经过分词处理后的文本列表。

  • TfidfVectorizer 初始化时指定了停用词 ['期间', '做出'],这些词在特征提取时会被忽略。

  • fit_transform 方法将文本数据转换为 TF-IDF 特征矩阵。

  • data_new.toarray() 将稀疏矩阵转换为密集矩阵(二维数组)。

  • transfer.get_feature_names_out() 获取特征名称列表。

  • pd.DataFrame 将二维数组转换为 DataFrame,列名为特征名称。

以上是特征提取并转换成Dataframe形式的代码流程

无量纲化-预处理

无量纲化(Normalization)是数据预处理中的一个重要步骤,尤其是在处理多维数据时。无量纲化的主要目的是消除不同特征之间的量纲差异,使得每个特征对模型的影响更加均衡。

MinMaxScaler 归一化

导入:

python 复制代码
from sklearn.preprocessing import MinMaxScaler

sklern.preprocessing MinMaxscaler

python 复制代码
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data = np.array([
    [10, 200, 50],
    [20, 150, 60],
    [30, 100, 70],
    [40, 50, 80]
])
transfer = MinMaxScaler(feature_range=(0, 1))
data_new = transfer.fit_transform(data)
print(data_new)

feature_range=(), 为阈值,设置阈值可以设置特征取值范围

StandardScaler 标准化

它的目的是将不同特征的数值范围缩放到统一的标准范围,以便更好地适应一些机器学习算法,特别是那些对输入数据的尺度敏感的算法。

与MinMaxScaler一样,原始数据类型可以是list、DataFrame和ndarray

fit_transform函数的返回值为ndarray, 归一化后得到的数据类型都是ndarray

python 复制代码
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
df_data = pd.read_csv("../src/dating.txt")
# print(df_data)
transfer = StandardScaler()#实例化转换器
data_new = transfer.fit_transform(df_data)#使用fit_transfer方法转化
# print(type(data_new[0:5]))
data_1 = pd.DataFrame(data_new)
nd_data = data_1.values
print(type(nd_data))

fit:

  • 这个方法用来计算数据的统计信息,比如均值和标准差(在StandardScaler的情况下)。这些统计信息随后会被用于数据的标准化。

fit_transform:

  • 这个方法相当于先调用fit再调用transform,但是它在内部执行得更高效。

transform:

  • 这个方法使用已经通过fit方法计算出的统计信息来转换数据。

  • 一旦scaler对象在X_train上被fit,它就已经知道了如何将数据标准化。 这时,对于测试集X_test,我们只需要使用transform方法,因为我们不希望在测试集上重新计算任何统计信息,也不希望测试集的信息影响到训练过程。如果我们对X_test也使用fit_transform,测试集的信息就可能会影响到训练过程。

特征降维

特征降维其目的:是减少数据集的维度,同时尽可能保留数据的重要信息。

VarianceThreshold 低方差过滤特征选择

过滤特征:移除所有方差低于设定阈值的特征

python 复制代码
from sklearn.feature_selection import VarianceThreshold
import pandas as pd 
def vars():
    data=pd.DataFrame([[10,1],[11,3],[11,1],[11,5],[11,9],[11,3],[11,2],[11,6]])
    transfer = VarianceThreshold(threshold=1)
    data_new = transfer.fit_transform(data)
    print(data_new)
    return
vars()

代码中的threshold=1,为设置的阈值

低于阈值的被过滤掉。

根据相关系数的特征选择

正相关性(Positive Correlation)是指两个变量之间的一种统计关系,其中一个变量的增加通常伴随着另一个变量的增加,反之亦然。在正相关的关系中,两个变量的变化趋势是同向的。当我们说两个变量正相关时,意味着:

  • 如果第一个变量增加,第二个变量也有很大的概率会增加。

  • 同样,如果第一个变量减少,第二个变量也很可能会减少。

在数学上,正相关性通常用正值的相关系数来表示,这个值介于0和1之间。当相关系数等于1时,表示两个变量之间存在完美的正相关关系,即一个变量的值可以完全由另一个变量的值预测。

负相关性(Negative Correlation)与正相关性刚好相反,但是也说明相关,比如运动频率和BMI体重指数程负相关

不相关指两者的相关性很小,一个变量变化不会引起另外的变量变化,只是没有线性关系. 比如饭量和智商

皮尔逊相关系数
  • \\rho=1 表示完全正相关,即随着一个变量的增加,另一个变量也线性增加。

  • \\rho=-1 表示完全负相关,即随着一个变量的增加,另一个变量线性减少。

  • \\rho=0 表示两个变量之间不存在线性关系。

scipy.stats.personr(x, y) 计算两特征之间的相关性

python 复制代码
from scipy.stats import pearsonr
def association_demo():
     # 1、获取数据
    data = pd.read_csv("../src/factor_returns.csv")
    data = data.iloc[:, 1:-2]
     # 计算某两个变量之间的相关系数
    r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])
    print(r1.statistic) #-0.0043893227799362555 相关性, 负数表示负相关
    print(r1.pvalue) #0.8327205496590723        正相关性
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print(r2) #PearsonRResult(statistic=0.9958450413136111, pvalue=0.0)
    return None
association_demo()
相关推荐
龙的爹23333 分钟前
论文翻译 | RECITATION-AUGMENTED LANGUAGE MODELS
人工智能·语言模型·自然语言处理·prompt·gpu算力
白光白光3 分钟前
凸函数与深度学习调参
人工智能·深度学习
sp_fyf_20245 分钟前
【大语言模型】ACL2024论文-18 MINPROMPT:基于图的最小提示数据增强用于少样本问答
人工智能·深度学习·神经网络·目标检测·机器学习·语言模型·自然语言处理
weixin_543662868 分钟前
BERT的中文问答系统33
人工智能·深度学习·bert
爱喝白开水a11 分钟前
Sentence-BERT实现文本匹配【分类目标函数】
人工智能·深度学习·机器学习·自然语言处理·分类·bert·大模型微调
Jack黄从零学c++32 分钟前
opencv(c++)---自带的卷积运算filter2D以及应用
c++·人工智能·opencv
封步宇AIGC43 分钟前
量化交易系统开发-实时行情自动化交易-4.2.3.指数移动平均线实现
人工智能·python·机器学习·数据挖掘
Mr.谢尔比1 小时前
李宏毅机器学习课程知识点摘要(1-5集)
人工智能·pytorch·深度学习·神经网络·算法·机器学习·计算机视觉
我是博博啦1 小时前
matlab例题
人工智能·算法·matlab
DieYoung_Alive1 小时前
一篇文章了解机器学习
人工智能·机器学习