摘要:本篇主要介绍了人工智能机器学习之特征工程,通过具体的内容展现,希望对大家人工智能机器学习的学习有一定的帮助。
本篇主要介绍了人工智能机器学习之特征工程,通过具体的内容展现,希望对大家人工智能机器学习的学习有一定的帮助。
什么是特征工程?
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
意义:会直接影响机器学习的效果
特征工程包含的内容:
特征抽取
特征预处理
特征降维
特征抽取
机器学习算法 – 统计方法 – 数学公式
文本类型 —> 数值
类型 ----> 数值
字典的特征提取
sklearn.feature_extraction.DictVectorizer(sparse=True…)
vector 向量、矢量
矩阵: matrix 二维数组
向量: vector 一维数组
父类:转换器类
返回sparse矩阵(稀疏矩阵)
应用场景:
1>数据集当中类别特征比较多
* 将数据集的特征-----> 字典类型
* DictVectorizer转换
2>本身拿到的数据就是字典类型
补充
稀疏矩阵:将非零值按位置表现出来
节省内存,提高加载效率
def dict_demo():
'''
字典特征值抽取
:return:
'''
data = [{'city':'北京','temperature':100},{'city':'上海','temperature':60},
{'city':'深圳','temperature':30}]
#1.实例化一个转换器类
transfer1 = DictVectorizer(sparse=True)
transfer2 = DictVectorizer(sparse=False)
#2.调用 fit_transform()
data_new1 = transfer1.fit_transform(data)
data_new2 = transfer2.fit_transform(data)
print("data_new1:\n",data_new1)
print("data_new2:\n",data_new2)
if __name__ == "__main__":
# sklearn()数据集的使用
# datasets_demo()
#字典特征值的抽取
dict_demo()
文本的特征提取
单词 作为 特征(句子、短语、单词、字母…)
方法一:CountVectorizer
统计每个 样本特征词 出现的个数
注意:
某些参数:stop_words 停用词,不计入特征词的单词
中文句子无空格会被当作一个特征词
单个字母或中文不计入特征值
关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少
方法二:TfidfVectorizer
* TF-IDF – 重要程度
* TF — 词频
* IDF — 逆向文档频率
* 返回值:sparse矩阵
方法一:CountVectorizer
def count_demo():
'''
文本特征抽取
: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())
return None
if __name__ == "__main__":
#文本特征值的抽取
count_demo()
#注意:不支持单个字母
def count_cn_demo():
'''
文本特征抽取
:return:
'''
data1 = ["我爱北京天安门",
"天安门上太阳升"]
data2 = ["我 爱 北京 天安门",
"天安门 上 太阳 升"]
#1.实例化一个转换器类
transfer = CountVectorizer()
#2.调用 fit_transform()
data_new1 = transfer.fit_transform(data1)
print("data_new1:\n", data_new1.toarray())
# 单词字典
print(transfer.get_feature_names())
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`")
data_new2 = transfer.fit_transform(data2)
print("data_new2:\n", data_new2.toarray())
# 单词字典
print( transfer.get_feature_names())
return None
if __name__ == "__main__":
#中文文本特征值的抽取
count_cn_demo()
#注意:不支持单个中文
进阶
自动进行中文分词
def cut_word(text):
'''
进行中文分词:"我爱北京天安门"----》"我 爱 北京 天安门"
:param text:
:return:
'''
# a = " ".join(list(jieba.cut(text)))
# print(a)
return " ".join(list(jieba.cut(text)))
def count_cn_demo2():
'''
中文文本特征抽取,自动分词
:return:
'''
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sentence in data:
data_new.append(cut_word(sentence))
# 1.实例化一个转换器类
transfer = CountVectorizer()
# 2.调用 fit_transform()
data_final = transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征名字:\n",transfer.get_feature_names())
return None
if __name__ == "__main__":
#测试
# data = "我爱北京天安门"
# cut_word(data)
#中文文本特征抽取,自动分词
count_cn_demo2()
方法二:TfidfVectorizer
def tfidf_demo():
'''
使用TF-IDF的方法进行文本特征抽取
:return:
'''
data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
"我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
"如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
data_new = []
for sentence in data:
data_new.append(cut_word(sentence))
# 1.实例化一个转换器类
transfer = TfidfVectorizer()
# 2.调用 fit_transform()
data_final = transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
if __name__ == "__main__":
# sklearn()数据集的使用
# datasets_demo()
#字典特征值的抽取
# dict_demo()
#文本特征值的抽取
# count_demo()
#中文文本特征值的抽取
# count_cn_demo()
#测试
# data = "我爱北京天安门"
# cut_word(data)
#中文文本特征抽取,自动分词
# count_cn_demo2()
# 使用TF-IDF的方法进行文本特征抽取
tfidf_demo()
特征预处理
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
包含的内容
数值型数据的无量钢化:
归一化
标准化
特征预处理API
sklearn.preprocessing
归一化
异常值:最大值、最小值
出现该情况结果显然出现异常
例如:
x' = (90-60)/(90-60) = 1
x'' = 1*1+0 = 1
def minmax_demo():
'''
归一化
:return:
'''
#1.获取数据
data = pd.read_csv("dating.txt")
# print(data)
data = data.iloc[:,:3] #只取数据前三列
#2.实例化一个转换器类型
transfer = MinMaxScaler() #默认0-1
#3.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)
return None
if __name__ == "__main__":
# 归一化
minmax_demo()
标准化
def stand_demo():
'''
标准化
:return:
'''
# 1.获取数据
data = pd.read_csv("dating.txt")
# print(data)
data = data.iloc[:, :3] # 只取数据前三列
# 2.实例化一个转换器类型
transfer = StandardScaler() # 默认0-1
# 3.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
return None
if __name__ == "__main__":
#标准化
stand_demo()
特征降维
降低的对象:二维数组
降维:降低特征的个数
效果:特征与特征不相关
降维的两种方法
特征选择
主成分分析
特征选择
数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联。
* 方差选择法:低方差特征过滤
* 相关系数:特征与特征之间的相关程度
Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)。
* 决策树:信息嫡、信息增益
* 正则化
* 深度学习
主成分分析(PCA)
定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
sklearn.decomposition.PCA(n_components=None)
n_components:
小数:表示保留到百分之多少的信息
整数:表示减少到多少特征
返回值:转换后指定维数的array
def pca_demo():
'''
PCA降维
:return:
'''
data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]] #三行四列
#1.实例化一个转换器类
transfer = PCA(n_components=2)
#2.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)
return None
if __name__ == "__main__":
# PCA降维
pca_demo()
案例:探究用户对物品类别的喜好细分降维
import pandas as pd
# 1.获取数据
from sklearn.decomposition import PCA
order_products = pd.read_csv("order_products__prior.csv")#order_id product_id add_to_cart_order reordered
products = pd.read_csv("products.csv")#product_id ... department_id
orders = pd.read_csv("orders.csv")#order_id user_id...order_hour_of_day days_since_prior_order
aisles = pd.read_csv("aisles.csv")#aisle_id aisle
# print(products)
# 2.合并表
table1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"])
table2 = pd.merge(table1,order_products,on=["product_id","product_id"])
table3 = pd.merge(table2,orders,on=["order_id","order_id"])
print(table3.head())
# 3.找到user_id和aisle之间的关系
table = pd.crosstab(table3["user_id"],table3["aisle"])
data = table[:10000]
# 4.PCA降维
#1)实例化一个转换器类
transfer = PCA(n_components=0.95)
#2)调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new.shape)
————————————————
我是小职,记得找我
✅ 解锁高薪工作
✅ 免费获取基础课程·答疑解惑·职业测评
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号