当前位置: 首页 > news >正文

机器学习的特征工程

字典特征提取

def dict_demo():"""字典特征提取:return:"""data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]# data = [{'city':['北京','上海','深圳']},{'temperature':["100","60","30"]}]from sklearn.feature_extraction import DictVectorizer# 1、实例化一个转换器类transfer = DictVectorizer(sparse=False) # sparse=False表示不用稀疏矩阵存储,稀疏矩阵存储的好处是节省内存,但是不方便观察,所以一般不用# 2、调用fit_transformdata_new = transfer.fit_transform(data)print(f'转换后的数据:{data_new}')print(f'特征名字:{transfer.get_feature_names_out()}') # ['city=上海' 'city=北京' 'city=深圳' 'temperature']return None

结果显示

注意:如果特征中存在非数值类型数据,需要转换成字典然后使用one-hot编码

文本特征提取

def text_demo():"""文本特征提取:return:"""data = ["life is short,i like python","life is too long,i dislike python"]from sklearn.feature_extraction.text import CountVectorizer# 1、实例化一个转换器类transfer = CountVectorizer()# 2、调用fit_transformdata_new = transfer.fit_transform(data)print(f'转换后的数据:{data_new.toarray()}') # toarray()将稀疏矩阵转换成数组print(f'特征名字:{transfer.get_feature_names_out()}')return None

结果显示

中文文本特征抽取

def chinese_demo():"""中文文本特征抽取:return:"""data = ["我 爱 北京 天安门","天安门 上 太阳 升"]from sklearn.feature_extraction.text import CountVectorizer# 1、实例化一个转换器类transfer = CountVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词# 2、调用fit_transformdata_new = transfer.fit_transform(data)print(f'转换后的数据:{data_new.toarray()}') # toarray()将稀疏矩阵转换成数组print(f'特征名字:{transfer.get_feature_names_out()}')return None

结果

中文文本抽取,自动分词

# 分词函数
import jieba
def cut_word(text):text = " ".join(list(jieba.cut(text)))return textdef chinese_demo2():"""中文文本特征抽取,自动分词:return:"""data = ["今天很残酷,明天更残酷,后天很美好,但绝对大多数是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用了一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相关联。"]# 1、分词data_new = []for sent in data:data_new.append(cut_word(sent))# print(data_new)# 2、特征抽取from sklearn.feature_extraction.text import CountVectorizer# 1、实例化一个转换器类transfer = CountVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词# 2、调用fit_transformdata_final = transfer.fit_transform(data_new)print(f'转换后的数据:{data_final.toarray()}') # toarray()将稀疏矩阵转换成数组print(f'特征名字:{transfer.get_feature_names_out()}')

结果

TF-IDF特征抽取

def tf_idf_demo():"""tf-idf特征抽取:return:"""data = ["今天很残酷,明天更残酷,后天很美好,但绝对大多数是死在明天晚上,所以每个人不要放弃今天。","我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。","如果只用了一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相关联。"]# 1、分词data_new = []for sent in data:data_new.append(cut_word(sent))# print(data_new)# 2、特征抽取from sklearn.feature_extraction.text import TfidfVectorizer# 1、实例化一个转换器类transfer = TfidfVectorizer(stop_words=[]) # stop_words表示停用词,不需要的词# 2、调用fit_transformdata_final = transfer.fit_transform(data_new)print(f'转换后的数据:{data_final.toarray()}') # toarray()将稀疏矩阵转换成数组print(f'特征名字:{transfer.get_feature_names_out()}')

结果

归一化

data.txt

def guiyi_demo():"""归一化:return:"""import pandas as pd# 读取数据data = pd.read_csv("./data.txt")# print(data)data = data.iloc[:,:3]# print(data)# 归一化(针对特征值)from sklearn.preprocessing import MinMaxScaler# 1、实例化一个转换器类transfer = MinMaxScaler(feature_range=(0,1)) # feature_range表示归一化的范围# 2、调用fit_transformdata_new = transfer.fit_transform(data)print(f'转换后的数据:{data_new}')

结果

标准化

def biaozhun_demo():"""标准化:return:"""import pandas as pddata = pd.read_csv("./data.txt")data = data.iloc[:,:3]# 标准化from sklearn.preprocessing import StandardScaler# 1、实例化一个转换器类transfer = StandardScaler()# 2、调用fit_transformdata_new = transfer.fit_transform(data)print(f'转换后的数据:{data_new}')

结果

低方差特征过滤

def varis_demo():"""过滤低方差特征:return:"""import pandas as pddata = pd.read_csv("./data.txt")data = data.iloc[:,1:-2]# 过滤低方差特征from sklearn.feature_selection import VarianceThreshold# 1、实例化一个转换器类transfer = VarianceThreshold(threshold=0.0) # threshold表示方差的阈值# 2、调用fit_transformdata_new = transfer.fit_transform(data)print(f'转换后的数据:{data_new}')

结果

相关系数法

def xiangguan_demo():"""相关系数法:return:"""import pandas as pddata = pd.read_csv("./data.txt")data = data.iloc[:,1:-2]# 相关系数法,皮尔逊相关系数from scipy.stats import pearsonr# 1、实例化一个转换器类r = pearsonr(data['pe_ratio'],data['pb_ratio'])# 2、求出相关系数print(f'皮尔逊相关系数:{r}')# 处理方法# 1、选取其中一个特征# 2、加权求和# 3、主成分分析

主成分分析

def pca_demo():"""主成分分析:return:"""data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]# 主成分分析from sklearn.decomposition import PCA# 1、实例化一个转换器类# transfer = PCA(n_components=0.9) # n_components表示保留多少特征信息transfer = PCA(n_components=2) # n_components表示保留的特征个数# 2、调用fit_transformdata_new = transfer.fit_transform(data)print(f'转换后的数据:{data_new}')print(f'保留的特征个数:{transfer.n_components_}')print(f'保留的特征百分比:{transfer.explained_variance_ratio_}')return None

结果

综合案例分析

def instacart_demo():"""instacart案例分析:return:"""# 1、读取数据import pandas as pdorder_products = pd.read_csv('./instacart/order_products__prior.csv')orders = pd.read_csv('./instacart/orders.csv')products = pd.read_csv('./instacart/products.csv')aisles = pd.read_csv('./instacart/aisles.csv')# 2、合并aisles和products表,目的:aisles_id和products在一张表中table1 = pd.merge(aisles,products,on=['aisles_id','aisles_id'])table2 = pd.merge(table1,order_products,on=['product_id','product_id'])table3 = pd.merge(table2,orders,on=['order_id','order_id'])# 3、交叉表处理table = pd.crosstab(table3['user_id'],table3['aisle'])# 4、主成分分析from sklearn.decomposition import PCA# 1、实例化一个转换器类transfer = PCA(n_components=0.95) # n_components表示保留多少特征信息# 2、调用fit_transformdata_new = transfer.fit_transform(table)print(f'转换后的数据:{data_new}')print(f'保留的特征个数:{transfer.n_components_}')print(f'保留的特征百分比:{transfer.explained_variance_ratio_}')return None

http://www.lryc.cn/news/157203.html

相关文章:

  • python3 修改nacos的yaml配置
  • YOLOv8 : 数据组织
  • golang如何生成zip压缩文件
  • AntDesign技术指南:构建优雅的前端界面
  • 机器人任务挖掘与智能超级自动化技术解析
  • C#通过ModbusTcp协议读写西门子PLC中的浮点数
  • 19-springcloud(中)
  • Leetcode1090. 受标签影响的最大值
  • 第七章:敏捷开发工具方法-part2-CI/CD工具介绍
  • 【自学开发之旅】Flask-回顾--对象拆分-蓝图(二)
  • 自动驾驶中间件
  • 鲲鹏920(ARM64)移植javacpp
  • python打包exe实用版
  • 什么是反向代理(Reverse Proxy)?解释反向代理的作用和常见应用。
  • 算法通关村第十二关——不简单的字符串转换问题
  • PROSOFT PTQ-PDPMV1网络接口模块
  • 力扣(LeetCode)算法_C++——稀疏矩阵的乘法
  • 华为云API人脸识别服务FRS的感知力—偷偷藏不住的你
  • 产品技术体系
  • Docker从认识到实践再到底层原理(二-3)|LXC容器
  • [运维|docker] ubuntu镜像更新时报E: Problem executing scripts APT::Update::Post-Invoke错误
  • 计算机网络的故事——HTTP首部
  • js农历与阳历转换使用笔记
  • 苹果与芯片巨头Arm达成20年新合作协议,将继续采用芯片技术
  • Linux下systemd深入指南:如何优化Java服务管理与开机自启配置
  • PMOS阵列(PMOS阵列代替)
  • Linux常见指令
  • 让开发回归简单模式-组件封装
  • LED显示屏安全亮度参数设置方法和防护
  • 数据库sql--关于计算方圆5公里点位编写