#sklearn 特征抽取 将文本等数据特征值化
# 特征抽取的API
# sklearn.feature_extraction
#字典特征抽取,对字典数据进行特征值化
#API 接口 sk.feature_extraction.DictVectorizer
# 语法:
# DictVectorizer.fit_transform(X)
# X:字典或者包含字典的迭代器
#
# 流程:
# 1、实例化DictVectorizer
# 2.调用fit_transform方法输入数据并转换
a=[{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}]
def dictvec():
dict=DictVectorizer(sparse=False)
data=dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])
print(dict.get_feature_names())
#['city=上海', 'city=北京', 'city=深圳', 'temperature']
print(data)
return None
dictvec()
# #返回值 sparse矩阵,为了节省内存,只记不为零的数据
# (0, 1) 1.0
# (0, 3) 100.0
# (1, 0) 1.0
# (1, 3) 60.0
# (2, 2) 1.0
# (2, 3) 30.0
# 字典数据抽取:把字典中一些类别的特征进行转化成特征,数值型数据不进行转化
#文本特征抽取,对文本数据进行特征值化
#API 接口 sklearn.feature_extraction.text.CountVectorizer
# 语法:
# CountVectorizer.fit_transform(X)
# X:文本数据
# CountVectorizer.get_feature_names()
# def countvec():
# cv=CountVectorizer()
# data2=cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])
# print(data2.toarray()) #sparse矩阵转化为array数组
# print(cv.get_feature_names())
# return None
# countvec()
# #中文分词jieba
# import jieba
# d1=jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
# d2=jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
# d3=jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
# #转化成列表
# cont1=list(d1)
# cont2=list(d2)
# cont3=list(d3)
# #把列表转化成字符串
# c1=" ".join(cont1)
# c2=" ".join(cont2)
# c3=" ".join(cont3)
# def hangzivec():
# hanzi = CountVectorizer()
# data=hanzi.fit_transform([c1,c2,c3])
# print(hanzi.get_feature_names())
# print(data.toarray())
# return None
# hangzivec()
#文本分类,tf:term frequency,词频率 idf:逆文档频率 log(总文档数量/改词出现的文档数)
#tf*idf 重要性衡量程度
# TfidfVectorizer(stop_words=None,...)
#返回词的权重矩阵
# Tfidfvectorizer.fit_transform(X)
# X:文本或者包含文本字符串的可迭代对象
# 返回值:sparse矩阵
# TfidfVectorizer.inverse_transform(X)
# X:array数组或者sparse矩阵
# 返回转换之前的数据格式
# TfidfVectorizer.get_feature_names()
# 返回单词列表
import jieba
d1=jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
d2=jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
d3=jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
#转化成列表
cont1=list(d1)
cont2=list(d2)
cont3=list(d3)
#把列表转化成字符串
c1=" ".join(cont1)
c2=" ".join(cont2)
c3=" ".join(cont3)
def tfidfvec():
hanzi = TfidfVectorizer()
data=hanzi.fit_transform([c1,c2,c3])
print(hanzi.get_feature_names())
print(data.toarray())
return None
tfidfvec()
# 特征预处理
import sklearn.preprocessing
# 通过特定统计方法将数据转换成算法要求的数据
# 数值型数据:标准缩放,归一化,标准化,缺失值
# 类别型数据:one-hot编码
# 时间类型:时间的切分
#
# 归一化:通过对原始数据进行变换把数据映射到0-1之间
# 公式:X1=(x-min)/(max-min) X2=X1*(mx-mi)+mi mx-mi为指定区间,如果为1-0区间,则mx=1,mi=0
# X2为目标值,
#
# sklearn归一化的API,sklearn.preprocessing.MinMaxScaler
# 语法:MinMaxScalar(feature_range=(0,1)....)
# MinMaxScaler.fit_transform(X)
# X:numpy array数据,返回相同形状的array
a=[[90,2,10,40],
[60,4,15,45],
[75,3,13,46]]
from sklearn.preprocessing import MinMaxScaler
def guiyi():
minmax = MinMaxScaler()
data=minmax.fit_transform(a)
print(data)
return None
guiyi()
#归一化使用场景:某一个特征对最终结果不会造成更大影响,同等重要的特征进行归一化
#异常值会导致归一化的鲁棒性较差
#标准化
# X1=(X-mean)/标准差
# 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
# 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
# sklearn归一化的API,sklearn.preprocessing.StandardScaler
# 语法:StandardScaler()
# StandardScaler.fit_transform(X)
# X:numpy array数据,返回相同形状的array
B=[[ 1., -1., 3.],
[ 2., 4., 2.],
[ 4., 6., -1.]]
from sklearn.preprocessing import StandardScaler
def biaozhun():
biaozhun = StandardScaler()
data=biaozhun.fit_transform(B)
print(data)
return None
biaozhun()
#标准化在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
sklearn学习
最新推荐文章于 2024-09-26 19:15:00 发布