sklearn特征抽取

目录

一。可用数据集

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]]))#数据转换



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PURE-li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值