15 sklearn 字典特征抽取

字典特征抽取的应用场景:
    - 数据集当中,类别特征比较多的情况下
        - 将数据集的特征转换为字典类型
        - DictVectorizer转换
    - 如果本身拿到的数据就是字典类型,则使用字典特征抽取。
先导包:import sklearn
特征提取api:sklearn.feature_extraction

字典特征抽取: -- 属于类别的特征,转化为one-hot编码
sklearn.feature_extraction.DictVectorizer() # 形成一个转换器,将字典转化为数值
    - vector 数学里叫向量,物理里叫矢量
        - 矩阵 matrix 二维数组
        - 向量 vector 一维数组
    - DictVectorizer() 实例化
    - DictVectorizer.fit_transform(X), 字典或者包含字典的迭代器放进去。返回值返回的是 sparse矩阵
    - DictVectorizer.inverse_transform(X), X 是 array 数组或者 sparse 矩阵,返回值是 转换之前的数据格式
    - DictVectorizer.get_feature_names(), 返回类别名称

举例子:

from sklearn import feature_extraction
def dict_demo():
    """
    字典特征抽取
    :return:
    """
    data = [{"city": "shanghai", "temperature": 40},
            {"city": "beijing", "temperature": 30},
            {"city": "shenzhen", "temperature": 60}]
    # 实例化一个转换器类
    DictVectorizer = feature_extraction.DictVectorizer(sparse=False)
    # 调用 fit_transform 方法,将字典转化为数值
    data_new = DictVectorizer.fit_transform(data) # 返回一个 sparse 矩阵
    """
data_new is: 
  (0, 1)	1.0
  (0, 3)	40.0
  (1, 0)	1.0
  (1, 3)	30.0
  (2, 2)	1.0
  (2, 3)	60.0
上述是一个稀疏矩阵,稀疏矩阵是将非 0 值按位置表示出来,节省内存,提高加载效率。如果不想用这种形式出现,则在转换器中,将 sparse 设置为 false,则以二维数组的形式展现。
data_new is: 
 [[ 0.  1.  0. 40.]
 [ 1.  0.  0. 30.]
 [ 0.  0.  1. 60.]]
    """
    print("data_new is: \n", data_new)
    # 获取特征名字
    #  ['city=beijing', 'city=shanghai', 'city=shenzhen', 'temperature']
    print("feature names is: \n", DictVectorizer.get_feature_names())

if __name__ == '__main__':
    dict_demo()



feature names is: 
 ['city=beijing', 'city=shanghai', 'city=shenzhen', 'temperature']

data_new is: 

 [[ 0.  1.  0. 40.]
 [ 1.  0.  0. 30.]
 [ 0.  0.  1. 60.]]

上面这两个矩阵的解释,data_new 是3行4列的矩阵,为什么呢?因为有 4 个特征,所以就有 4 列。

第一列,如果 city 是北京,则是 1,否则是 0。

第二列,如果 city 是上海,则是 1,否则是 0。

第三列,如果 city 是深圳,则是 1,否则是 0。

data = [{"city": "shanghai", "temperature": 40},
        {"city": "beijing", "temperature": 30},
        {"city": "shenzhen", "temperature": 60}]

我们的 data 数据,

        第1个样本的 city 是上海,不是北京,所以0

        第2个样本的 city 是北京,是北京,所以1

        第3个样本的 city 是 深圳,不是北京,所以0

所以data_new的第一列是 010。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值