概述
目录
一。可用数据集
1.scikit-learn
2.UCI
3.Kaggle
二。特征工程是什么
三。sklearn特征抽取
1.字典特征抽取
2.文本特征抽取
①.案例:对三段话进行特征值化
②.TfidfVectorizer语法
四.sklearn特征预处理
1.归一化
2.标准化
3.缺失值
五。特征降维
1.特征选择
2.PCA(主成分分析)
五。代码汇总
一。可用数据集
1.scikit-learn
特点:1、数据量较小
2、方便学习
•Python语言的机器学习工具
•Scikit-learn包括许多知名的机器学习算法的实现
•Scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎。
2.UCI
特点:1、收录了360个数据集
2、覆盖科学、生活、经济等领域
3、数据量几十万
3.Kaggle
特点:1、大数据竞赛平台
2、80万科学家
3、真实数据
4、数据量巨大
二。特征工程是什么
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性
三。sklearn特征抽取
1.字典特征抽取
对字典数据进行特征值化
•DictVectorizer(sparse=True,…)
•DictVectorizer.fit_transform(X)
•X:字典或者包含字典的迭代器
•返回值:返回sparse矩阵
•DictVectorizer.inverse_transform(X)
•X:array数组或者sparse矩阵
•返回值:转换之前数据格式
•DictVectorizer.get_feature_names()
•返回类别名称
•DictVectorizer.transform(X)
•按照原先的标准转换
from sklearn.feature_extraction import DictVectorizer
def dictvec():
"""字典数据抽取"""
# dict=DictVectorizer(sparse=False)#实例化
dict = DictVectorizer() # 实例化
print(dict)
data=dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])
print(dict.get_feature_names())#列表
print(data)
print(data.toarray())
print(dict.inverse_transform(data))
return None
2.文本特征抽取
对文本数据进行特征值化
•CountVectorizer(max_df=1.0,min_df=1,…)
•返回词频矩阵
•CountVectorizer.fit_transform(X,y)
•X:文本或者包含文本字符串的可迭代对象
•返回值:返回sparse矩阵
•CountVectorizer.inverse_transform(X)
•X:array数组或者sparse矩阵
返回值:转换之前数据格式
•CountVectorizer.get_feature_names()
•返回值:单词列表
from sklearn.feature_extraction.text import CountVectorizer
def countvec():
"""对文本进行特征值化"""
cv=CountVectorizer()#实例化类
print(cv)
data=cv.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"])#统计所有文章当中所有的词(单个字母或字不统计),以空格分隔。在词的列表里面进行统计每个词出现的次数
print(cv.get_feature_names())#词的列表
print(data.toarray())
print(data)
return None
①.案例:对三段话进行特征值化
from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cutword():
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
content1=list(con1)
content2 = list(con2)
content3 = list(con3)
c1=" ".join(content1)
c2 = " ".join(content2)
c3 = " ".join(content3)
return c1,c2,c3
def hanzivec():
"""中文特征值化"""
c1,c2,c3=cutword()
print(c1,c2,c3)
cv=CountVectorizer()#实例化类
print(cv)
data=cv.fit_transform([c1,c2,c3])#统计所有文章当中所有的词(单个字母或字不统计),以空格分隔。在词的列表里面进行统计每个词出现的次数
print(cv.get_feature_names())
print(data.toarray())
return None
②.TfidfVectorizer语法
•TfidfVectorizer(stop_words=None,…)
•返回词的权重矩阵
•TfidfVectorizer.fit_transform(X,y)
•X:文本或者包含文本字符串的可迭代对象
•返回值:返回sparse矩阵
•TfidfVectorizer.inverse_transform(X)
•X:array数组或者sparse矩阵
返回值:转换之前数据格式
•TfidfVectorizer.get_feature_names()
•返回值:单词列表
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cutword():
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
content1=list(con1)
content2 = list(con2)
content3 = list(con3)
c1=" ".join(content1)
c2 = " ".join(content2)
c3 = " ".join(content3)
return c1,c2,c3
def tfidfvec():
"""中文特征值化"""
c1,c2,c3=cutword()
print(c1,c2,c3)
tf=TfidfVectorizer()#实例化类
print(tf)
data=tf.fit_transform([c1,c2,c3])#统计所有文章当中所有的词(单个字母或字不统计),以空格分隔。在词的列表里面进行统计每个词出现的次数
print(tf.get_feature_names())
print(data.toarray())
return None
四.sklearn特征预处理
通过特定的统计方法(数学方法)将数据转换成算法要求的数据
数值型数据:标准缩放:
1、归一化
2、标准化
3、缺失值
类别型数据:one-hot编码
时间类型:时间的切分
1.归一化
通过对原始数据进行变换把数据映射到(默认为[0,1])之间
作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0
•MinMaxScalar(feature_range=(0,1)…)
•每个特征缩放到给定范围(默认[0,1])
•MinMaxScalar.fit_transform(X)
•X:numpy array格式的数据[n_samples,n_features]
•返回值:转换后的形状相同的array
from sklearn.preprocessing import MinMaxScaler
def mm():
"""归一化处理,对每一列都要处理,把数据进行缩放,使得某一个特征对最后的结果不会有更大的影响"""
mm=MinMaxScaler(feature_range=(2,3))
data=mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
2.标准化
通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
作用于每一列,mean为平均值,σ为标准差(考量数据的稳定性)
std成为方差,std= (〖(x1-mean)〗^2+〖(x2-mean)〗^2+…)/(n(每个特征的样本数)),σ= √std
如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
•StandardScaler(…)
•处理之后每列来说所有数据都聚集在均值0附近方差为1
•StandardScaler.fit_transform(X,y)
•X:numpy array格式的数据[n_samples,n_features]
•返回值:转换后的形状相同的array
•StandardScaler.mean_
•原始数据中每列特征的平均值
•StandardScaler.std_
•原始数据每列特征的方差
from sklearn.preprocessing import StandardScaler
def stand():
"""标准化缩放"""
std=StandardScaler()
data=std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)#标准化之后的结果
return None
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
3.缺失值
•Imputer(missing_values='NaN', strategy='mean', axis=0)
•完成缺失值插补
•Imputer.fit_transform(X,y)
•X:numpy array格式的数据[n_samples,n_features]
•返回值:转换后的形状相同的array
1、 numpy的数组中可以使用np.nan/np.NaN来代替缺失值,属于float类型
2、如果是文件中的一些缺失值,可以替换成nan,通过np.array转化成float型的数组即可
from sklearn.impute import SimpleImputer
import numpy as np
def im():
"""缺失值处理"""
im=SimpleImputer(missing_values=np.nan,strategy="mean")
data=im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None
五。特征降维
1.特征选择
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法(三大武器):
1.Filter(过滤式):VarianceThreshold
sklearn.feature_selection.VarianceThreshold
•VarianceThreshold(threshold = 0.0)
•删除所有低方差特征
•Variance.fit_transform(X,y)
•X:numpy array格式的数据[n_samples,n_features]
•返回值:训练集差异低于threshold的特征将被删除。
•默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
from sklearn.feature_selection import VarianceThreshold#特征降维,特征选择(数据量小的时候)
def var():
"""特征选择-删除低方差的特征"""
var=VarianceThreshold(threshold=1)
data=var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return None
if __name__=="__main__":
var()
2.Embedded(嵌入式):正则化、决策树
3.Wrapper(包裹式)
2.PCA(主成分分析)
本质:PCA是一种分析、简化数据集的技术
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
•PCA(n_components=None)
•将数据分解为较低维数空间
•PCA.fit_transform(X)
•X:numpy array格式的数据[n_samples,n_features]
•返回值:转换后指定维度的array
from sklearn.decomposition import PCA#特征降维,pca主成分分析
def pca():
"""主成分分析进行特征降维"""
pca=PCA(n_components=0.9)
data=pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None
if __name__=="__main__":
pca()
pca降维案例
import pandas as pd
from sklearn.decomposition import PCA
prior=pd.read_csv("./order_products__prior.csv")
products=pd.read_csv("./products.csv")
orders=pd.read_csv("./orders.csv")
aisles=pd.read_csv("./aisles.csv")
_mg=pd.merge(prior,products,on=["product_id","product_id"])
_mg=pd.merge(_mg,orders,on=["order_id","order_id"])
mt=pd.merge(_mg,aisles,on=["aisle_id","aisle_id"])
print(mt.head())
print(mt.info())
print(len(mt["user_id"].tolist()))
print(len(set(mt["user_id"].tolist())))
cross=pd.crosstab(mt["user_id"],mt["aisle"])# 交叉表(特殊的分组工具)
print(cross)
print(type(cross))
pca=PCA(n_components=0.9)#进行主成分分析
data=pca.fit_transform(cross)
print(data)
/Users/lichengxiang/opt/anaconda3/bin/python /Users/lichengxiang/Desktop/python/机器学习/降维案例.py
order_id product_id ... days_since_prior_order aisle
0 2 33120 ... 8.0 eggs
1 26 33120 ... 7.0 eggs
2 120 33120 ... 10.0 eggs
3 327 33120 ... 8.0 eggs
4 390 33120 ... 9.0 eggs
[5 rows x 14 columns]
<class 'pandas.core.frame.DataFrame'>
Int64Index: 32434489 entries, 0 to 32434488
Data columns (total 14 columns):
# Column Dtype
--- ------ -----
0 order_id int64
1 product_id int64
2 add_to_cart_order int64
3 reordered int64
4 product_name object
5 aisle_id int64
6 department_id int64
7 user_id int64
8 eval_set object
9 order_number int64
10 order_dow int64
11 order_hour_of_day int64
12 days_since_prior_order float64
13 aisle object
dtypes: float64(1), int64(10), object(3)
memory usage: 3.6+ GB
None
32434489
206209
aisle air fresheners candles asian foods ... white wines yogurt
user_id ...
1 0 0 ... 0 1
2 0 3 ... 0 42
3 0 0 ... 0 0
4 0 0 ... 0 0
5 0 2 ... 0 3
... ... ... ... ... ...
206205 0 0 ... 0 5
206206 0 4 ... 0 0
206207 0 0 ... 0 15
206208 0 3 ... 0 33
206209 0 1 ... 0 3
[206209 rows x 134 columns]
<class 'pandas.core.frame.DataFrame'>
[[-2.42156587e+01 2.42942720e+00 -2.46636975e+00 ... 6.86800336e-01
1.69439402e+00 -2.34323022e+00]
[ 6.46320807e+00 3.67511165e+01 8.38255336e+00 ... 4.12121252e+00
2.44689740e+00 -4.28348478e+00]
[-7.99030162e+00 2.40438257e+00 -1.10300641e+01 ... 1.77534453e+00
-4.44194030e-01 7.86665571e-01]
...
[ 8.61143331e+00 7.70129866e+00 7.95240226e+00 ... -2.74252456e+00
1.07112531e+00 -6.31925661e-02]
[ 8.40862199e+01 2.04187340e+01 8.05410372e+00 ... 7.27554259e-01
3.51339470e+00 -1.79079914e+01]
[-1.39534562e+01 6.64621821e+00 -5.23030367e+00 ... 8.25329076e-01
1.38230701e+00 -2.41942061e+00]]
进程已结束,退出代码0
五。代码汇总
from sklearn.feature_extraction import DictVectorizer#特征抽取,字典数据抽取
from sklearn.feature_extraction.text import CountVectorizer#特征抽取
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer#特征抽取,考虑到了词的重要性
from sklearn.preprocessing import MinMaxScaler#特征预处理,归一化
from sklearn.preprocessing import StandardScaler#特征预处理,标准化
from sklearn.impute import SimpleImputer#特征预处理,缺失值
import numpy as np
from sklearn.feature_selection import VarianceThreshold#特征降维,特征选择(数据量小的时候)
from sklearn.decomposition import PCA#特征降维,pca主成分分析
def dictvec():
"""字典数据抽取"""
# dict=DictVectorizer(sparse=False)#实例化
dict = DictVectorizer() # 实例化
print(dict)
data=dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])
print(dict.get_feature_names())#列表
print(data)
print(data.toarray())
print(dict.inverse_transform(data))
return None
def countvec():
"""对文本进行特征值化"""
cv=CountVectorizer()#实例化类
print(cv)
data=cv.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"])#统计所有文章当中所有的词(单个字母或字不统计),以空格分隔。在词的列表里面进行统计每个词出现的次数
print(cv.get_feature_names())#词的列表
print(data.toarray())
print(data)
return None
def cutword():
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
content1=list(con1)
content2 = list(con2)
content3 = list(con3)
c1=" ".join(content1)
c2 = " ".join(content2)
c3 = " ".join(content3)
return c1,c2,c3
def hanzivec():
"""中文特征值化"""
c1,c2,c3=cutword()
print(c1,c2,c3)
cv=CountVectorizer()#实例化类
print(cv)
data=cv.fit_transform([c1,c2,c3])#统计所有文章当中所有的词(单个字母或字不统计),以空格分隔。在词的列表里面进行统计每个词出现的次数
print(cv.get_feature_names())
print(data.toarray())
return None
def tfidfvec():
"""中文特征值化"""
c1,c2,c3=cutword()
print(c1,c2,c3)
tf=TfidfVectorizer()#实例化类
print(tf)
data=tf.fit_transform([c1,c2,c3])#统计所有文章当中所有的词(单个字母或字不统计),以空格分隔。在词的列表里面进行统计每个词出现的次数
print(tf.get_feature_names())
print(data.toarray())
return None
def mm():
"""归一化处理,对每一列都要处理,把数据进行缩放,使得某一个特征对最后的结果不会有更大的影响"""
mm=MinMaxScaler(feature_range=(2,3))
data=mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
def stand():
"""标准化缩放"""
std=StandardScaler()
data=std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)#标准化之后的结果
return None
def im():
"""缺失值处理"""
im=SimpleImputer(missing_values=np.NaN,strategy="mean")
data=im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None
def var():
"""特征选择-删除低方差的特征"""
var=VarianceThreshold(threshold=1)
data=var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return None
def pca():
"""主成分分析进行特征降维"""
pca=PCA(n_components=0.9)
data=pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None
if __name__=="__main__":
# dictvec()
# print("*"*66)
# countvec()
# print("*" * 66)
# hanzivec()
# print("*" * 66)
# tfidfvec()
# print("*" * 66)
# mm()
# print("*" * 66)
# stand()
# print("*" * 66)
# im()
# print("*" * 66)
var()
# print("*" * 66)
# pca()
# print("*" * 66)
# s=StandardScaler()
# print(s.fit_transform([[1,2,3],[4,5,6]]))
# print("*" * 66)
# ss=StandardScaler()
# ss.fit([[1,2,3],[4,5,6]])#输入数据,计算平均值,方差,标准差等等
# print(ss.transform([[1,2,3],[4,5,6]]))#数据转换
最后
以上就是英勇方盒为你收集整理的sklearn特征抽取一。可用数据集二。特征工程是什么三。sklearn特征抽取四.sklearn特征预处理五。特征降维五。代码汇总的全部内容,希望文章能够帮你解决sklearn特征抽取一。可用数据集二。特征工程是什么三。sklearn特征抽取四.sklearn特征预处理五。特征降维五。代码汇总所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复