【刀剑源码】【手机app指标源码】【iapp防逆向源码】onehot编码源码_onehot编码缺点

1.特征处理1_StringIndexer与OneHotEncoder
2.One-hot与Word2Vec
3.OneHotEncoder独热编码和 LabelEncoder标签编码
4.onehot码有什么特点为什么FPGA适合用它
5.onehot编码后生成的编码编码特征列太多怎么办?

onehot编码源码_onehot编码缺点

特征处理1_StringIndexer与OneHotEncoder

        字符串-索引变换,就是将某些标签的字符串列编号变成标签索引项。标签索引项序列的取值范围就是

        [0,numLabels](这里的numLabels是所有出现的单词去掉重复的词后的总和)。

        这里的标签索引项顺序就是按照标签出现的频率来排序的,出现最多的标签索引就是0(倒序)。

如果输入是数值型,先将数值映射到字符串,再对字符串进行索引化。

        与StringIndexer对应,IndexToString是将索引化标签还原成原始的字符串。

        使用场景:在通过StringIndexer产生索引化标签,然后使用索引化标签进行训练,最后对预测结果使用IndexToString来获取其原始的标签字符串。

        结果显示:

        StringIndexer还有一个setHandleInvalid()的方法,通常是因为构建了一个StringIndexer实例,对DataFrame1进行fit后,再对DataFrame2进行transform,DataFrame2中出现了DataFrame1中未曾出现的标签,这时候可以通过设置setHandleInvalid(“skip”)来忽略新标签的行;

        当然setHandleInvalid(“keep”)则保留。

        不过奇怪的是,在实际工作中,发现fit和transform同一个Dataframe时,也有可能报这个错

        可以将离散特征通过one-hot编码映射到欧式空间,而我们常用的距离或相似度的计算都是基于欧式空间的。

        将一列标签索引映射到一列二进制向量,最多只会有一个单值(只有一个1)。

        如果是有4个标签索引:1,2,3,4

        那么对应的One-hot为[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]

        结果显示:

        注意:有一个方法 setDropLast,是否丢弃最后一个数,默认为true,观察上面的结果发现categoryIndex最大的2.0,经过OneHot得到的categoryVec为(2,[],[]),最大的categoryIndex被丢弃了。

        不过在设置setDropLast(false)后,

One-hot与Word2Vec

       one-hot是文本向量化最常用的方法之一。

        1.1 one-hot编码

          什么是one-hot编码?one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。举个例子,假设我们有四个样本(行),每个样本有三个特征(列),如图:

        上图中我们已经对每个特征进行了普通的数字编码:我们的feature_1有两种可能的取值,比如是男/女,这里男用1表示,女用2表示。那么one-hot编码是怎么搞的呢?我们再拿feature_2来说明:

        这里feature_2 有4种取值(状态),我们就用4个状态位来表示这个特征,one-hot编码就是保证每个样本中的单个特征只有1位处于状态1,其他的都是0。

       å¯¹äºŽ2种状态、三种状态、甚至更多状态都是这样表示,所以我们可以得到这些样本特征的新表示:

        one-hot编码将每个状态位都看成一个特征。对于前两个样本我们可以得到它的特征向量分别为

        1.2 one-hot在提取文本特征上的应用

          one hot在特征提取上属于词袋模型(bag of words)。关于如何使用one-hot抽取文本特征向量我们通过以下例子来说明。假设我们的语料库中有三段话:

            我爱中国

            爸爸妈妈爱我

            爸爸妈妈爱中国

        我们首先对预料库分离并获取其中所有的词,然后对每个此进行编号:

            1 我; 2 爱; 3 爸爸; 4 妈妈;5 中国

        然后使用one hot对每段话提取特征向量:

        ;

        ;

        此我们得到了最终的特征向量为

            我爱中国  ->   1,1,0,0,1

            爸爸妈妈爱我  ->  1,1,1,1,0

            爸爸妈妈爱中国  ->  0,1,1,1,1

        优缺点分析

        优点:一是解决了分类器不好处理离散数据的问题,二是在一定程度上也起到了扩充特征的作用(上面样本特征数从3扩展到了9)

        缺点:在文本特征表示上有些缺点就非常突出了。首先,它是一个词袋模型,不考虑词与词之间的顺序(文本中词的顺序信息也是很重要的);其次,它假设词与词相互独立(在大多数情况下,词与词是相互影响的);最后,它得到的特征是离散稀疏的。

        sklearn实现one hot encode

        from sklearn import preprocessing 

        enc = preprocessing.OneHotEncoder()  # 创建对象enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])  # 拟合array = enc.transform([[0,1,3]]).toarray()  # 转化print(array)

        1

        2

        3

        4

        5

        6

        word2vec得到词向量

        word2vec是如何得到词向量的?这个问题比较大。从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大小写转换检查拼写错误等操作,如果是中文日语语料库你需要增加分词处理。这个过程其他的答案已经梳理过了不再赘述。得到你想要的processed corpus之后,将他们的one-hot向量作为word2vec的输入,通过word2vec训练低维词向量(word embedding)就ok了。不得不说word2vec是个很棒的工具,目前有两种训练模型(CBOW和Skip-gram),两种加速算法(Negative Sample与Hierarchical Softmax)。于是我主要理解word2vec如何将corpus的one-hot向量(模型的输入)转换成低维词向量(模型的中间产物,更具体来说是输入权重矩阵),真真切切感受到向量的变化,不涉及加速算法。

        1 Word2Vec两种模型的大致印象

        刚才也提到了,Word2Vec包含了两种词训练模型:CBOW模型和Skip-gram模型。

        CBOW模型根据中心词W(t)周围的词来预测中心词 

        Skip-gram模型则根据中心词W(t)来预测周围词

        抛开两个模型的优缺点不说,它们的结构仅仅是输入层和输出层不同。请看:

       CBOW模型 

       Skip-gram模型

        这两张结构图其实是被简化了的,读者只需要对两个模型的区别有个大致的判断和认知就ok了。接下来我们具体分析一下CBOW模型的构造,以及词向量是如何产生的。理解了CBOW模型,Skip-gram模型也就不在话下啦。

        2 CBOW模型的理解

        其实数学基础及英文好的同学可以参照 斯坦福大学Deep Learning for NLP课堂笔记 。

        当然,懒省事儿的童鞋们就跟随我的脚步慢慢来吧。

        先来看着这个结构图,用自然语言描述一下CBOW模型的流程:

        CBOW模型结构图

        (花括号内{ }为解释内容.)

        输入层:上下文单词的onehot. { 假设单词向量空间dim为V,上下文单词个数为C}

        所有onehot分别乘以共享的输入权重矩阵W. { V*N矩阵,N为自己设定的数,初始化权重矩阵W}

        所得的向量 { 因为是onehot所以为向量} 相加求平均作为隐层向量, size为1*N.

        乘以输出权重矩阵W’ { N*V}

        得到向量 { 1*V} 激活函数处理得到V-dim概率分布 { PS: 因为是onehot嘛,其中的每一维斗代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)

        与true label的onehot做比较,误差越小越好

        所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W’。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实聪明的你已经看出来了,其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

        这回就能解释题主的疑问了!如果还是觉得我木有说明白,别着急!跟我来随着栗子走一趟CBOW模型的流程!

        3 CBOW模型流程举例

        假设我们现在的Corpus是这一个简单的只有四个单词的document: 

        { I drink coffee everyday} 

        我们选coffee作为中心词,window size设为2 

        也就是说,我们要根据单词”I”,”drink”和”everyday”来预测一个单词,并且我们希望这个单词是coffee。

        假设我们此时得到的概率分布已经达到了设定的迭代次数,那么现在我们训练出来的look up table应该为矩阵W。即,任何一个单词的one-hot表示乘以这个矩阵都将得到自己的word embedding。

        在我的新闻分类中由于使用的是自带的多词训练出的embedding层而有多个词并不在里面所以效果没有达到最佳,值得改进

OneHotEncoder独热编码和 LabelEncoder标签编码

       了解机器学习中的特征类别,包含连续型特征和离散型特征。源码在应用机器学习算法时,缺点特征的编码编码归一化至关重要。对于连续性特征,源码进行归一化可以确保所有特征在相同的缺点刀剑源码尺度上,避免某些特征因取值范围过大使其他特征影响降低。编码编码对于离散性特征,源码我们探讨了独热编码(OneHotEncoder)和标签编码(LabelEncoder)的缺点概念及其应用场景。

       独热编码(OneHotEncoder)是编码编码一种将离散特征转换为二进制形式的编码方式。以三种颜色为例(红、源码黄、缺点蓝),编码编码独热编码将颜色特征表示为一个长度等于颜色种类数的源码向量,其中只有一位为1,缺点其余位为0。这种编码方式可以将非数值型特征转换为数值型特征,适用于大多数机器学习算法。在进行独热编码时,以数据矩阵的形式展示编码结果,可以直观地看出不同特征维度的手机app指标源码编码方式。例如,对于给定的特征值集合,独热编码的结果会显示每个特征维度的编码方式及其对应值的编码表示。

       独热编码之所以重要,是因为它使得离散特征在机器学习算法中能够以更加合理的方式进行处理,尤其在距离计算和特征间的相似度计算中更为明显。将离散特征映射到欧式空间,可以使得特征之间的计算更为准确和公平,允许对每一维特征进行归一化处理。归一化操作可以确保特征在计算过程中具有相同的iapp防逆向源码权重,从而避免某些特征对模型结果的主导作用。

       独热编码在处理类别数目不多的情况下表现良好。对于大量的类别,直接使用独热编码可能导致特征维度急剧增加,从而增加计算复杂度和模型训练时间。在某些场景下,如文本分类或图像识别任务,独热编码可能会引入过拟合的风险。因此,在选择独热编码时,vue 还原源码输出需要权衡类别数目与计算复杂度之间的关系。

       标签编码(LabelEncoder)则将离散特征转换为连续的数值型变量。这种方法在某些情况下可能简化问题的解决过程,但存在潜在的风险。例如,对于具有特定语义的离散值(如颜色),使用标签编码可能导致不恰当的数学操作,例如计算平均值。这种编码方式在特定情况下可能会误导模型,因此在应用时需要谨慎考虑特征的08钓鱼端源码语义和算法需求。

       在进行机器学习项目时,理解特征归一化和编码的选择对于模型性能至关重要。归一化处理有助于避免特征之间的偏斜影响,而编码方式(独热编码或标签编码)的选择则取决于特征的特性以及所使用的算法对特征类型的要求。理解不同编码方式的原理、优缺点以及适用场景,能够帮助构建更加有效和准确的机器学习模型。

onehot码有什么特点为什么FPGA适合用它

       one-hot码有什么特点,为什么FPGA适合用它?

       独热码的各个位只有一位为1,使用的触发器较多,但可减少实现状态机的组合逻辑数目,减少复杂性,提高系统的速度,即工作时钟频率可以做到最高。FPGA中含有大量触发器资源,所以推荐使用独热码

onehot编码后生成的特征列太多怎么办?

       面对一Hot编码后特征列数量激增的问题,我们可以通过以下几点思路进行有效处理。

       首先,我们需要对离散型特征进行分类。是否需要对这些特征进行排序,取决于具体场景,通常排序有助于模型识别规律,但并不总是必要。

       其次,选择适用的模型类型。不同的模型在处理特征数量上有着不同的适应性。例如,深度学习模型对特征数量容忍度较高,而某些树形模型则倾向于较少的特征。

       最后,对于离散型特征列的处理方式,我们需要进行分类。常见的处理方法包括:去重、聚合、特征选择和特征融合。去重可以减少重复信息;聚合则通过对同类特征进行合并,以减少列数;特征选择则基于特征重要性,保留对模型预测贡献最大的特征;而特征融合则是将多个特征通过数学运算合成新特征,以减少列数同时保留关键信息。

       针对楼主的问题,可以尝试以上方法来解决一Hot编码后特征列数量过多的问题。希望这些建议对您有所帮助。

更多内容请点击【综合】专栏

精彩资讯