从标签编码器

时间:2018-06-13 10:22:37

标签: machine-learning scikit-learn deep-learning

我使用以下代码将字符串标签列表映射到一个热编码值列表:

from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder  
labelEncoder = LabelEncoder()
targets = ["blue","green","blue","blue","green"]    
integerEncoded = labelEncoder.fit_transform(targets)

稍后我需要确切地知道哪些字符串标签映射到哪个整数值。

即。我需要这样的东西:

integerMapping = GetIntegerMapping(labelEncoder)

哪里

integerMapping["blue"]

应该返回所有“蓝色”标签映射到的

的int值

integerMapping["green"]

应返回所有“绿色”标签映射到的int值。

如何才能获得integerMapping dictonary?

3 个答案:

答案 0 :(得分:0)

您可以使用LabelEncoder.classes_LabelEncoder.transform()来获取您要求的关系。以下功能可以满足您的需求。

def get_integer_mapping(le):
    '''
    Return a dict mapping labels to their integer values
    from an SKlearn LabelEncoder
    le = a fitted SKlearn LabelEncoder
    '''
    res = {}
    for cl in le.classes_:
        res.update({cl:le.transform([cl])[0]})

    return res

示例用法:

classes = ['blue', 'green']
le = LabelEncoder()
le.fit(classes)
integerMapping = get_integer_mapping(le)

integerMapping['blue']  # Returns 0
integerMapping['green']  # Returns 1

如果你有很多类,由于for循环,这可能不会非常快,但它应该适用于少数类。

更新

在适合10,000个类的LabelEncoder上定时。结果如下:

%timeit get_integer_mapping(le)
1 loop, best of 3: 17.1 s per loop

它实际上比我预期的更高效。

答案 1 :(得分:0)

标签编码器安装后有(function($) { var elmDrag, replacerSet = $(); var eventStack = ['dragstart', 'dragend', 'selectstart', 'dragover', 'dragenter', 'drop']; $.fn.dropme = function(options) { var userOpt = options.toString(); options = $.extend({ linkTo: false }, options); return this.each(function() { var regEx = new RegExp("/^enable|disable|destroy$/"); var index, items = $(this).children(options.items); var replacer = $('<' + (this.tagName.match(/^ul|ol|div$/i) ? 'li' : 'div') + ' class="drop-replacer">'); $(this).data('items', options.items); replacerSet = replacerSet.add(replacer); if (options.linkTo) { $(options.linkTo).add(this).data('linkTo', options.linkTo); } items.attr('draggable', 'true').on(eventStack[0], function(e) { var dataTrnsfr = e.originalEvent.dataTransfer; dataTrnsfr.effectAllowed = 'move'; dataTrnsfr.setData('Text', 'dummy'); elmDrag = $(this); index = (elmDrag).addClass('drop-elmDrag').index(); // console.log('Pegou elemento largado'); }).on(eventStack[1], function() { (elmDrag = $(this)).removeClass('drop-elmDrag').show(); replacerSet.detach(); if (index != elmDrag.index()) { items.parent().trigger('sortupdate', { item: elmDrag }); } elmDrag = null; // console.log('largou o elemento'); }).not('a[href], img').on(eventStack[2], function() { this.dragDrop && this.dragDrop(); // console.log('Responsavel pelo organizar elementos'); return false; }).end().add([this, replacer]).on('dragover dragenter drop', function(event) { if (!items.is(elmDrag) && options.linkTo !== $(elmDrag).parent().data('linkTo')) { return true; } if (event.type == 'drop') { event.stopPropagation(); replacerSet.filter(':visible').after(elmDrag); return false; } event.preventDefault(); event.originalEvent.dataTransfer.dropEffect = 'move'; if (items.is(this)) { if (options.replacerSize) { replacer.height(elmDrag.outerHeight()); } elmDrag.hide(); $(this)[replacer.index() < $(this).index() ? 'after' : 'before'](replacer); replacerSet.not(replacer).detach(); } else if (!replacerSet.is(this) && !$(this).children(options.items).length) { replacerSet.detach(); $(this).append(replacer); } return false; }); }); }; })(jQuery); 属性。用于替换标签值的整数是此数组中标签的索引。所以你可以通过以下方式获得映射:

classes_

答案 2 :(得分:0)

您可以制作一个字典来映射目标和编码的整数

integerMapping=dict(zip(targets,integerEncoded))