机器学习这四个东西,你知道吗?
作者头像
  • Z科技
  • 2020-04-03 06:08:02 2

分类变量特征提取

在处理分类数据时,一种常见的方法是使用独热编码(One-Hot Encoding),也称为One-of-K编码。这种方法通过二进制数来表示每个分类变量的特征。例如,对于城市名称这样的分类变量,我们可以将其转换为多个二进制特征,每个特征对应一个特定的城市。

```python from sklearn.feature_extraction import DictVectorizer

示例数据

instances = [{'city': 'New York'}, {'city': 'San Francisco'}, {'city': 'Chapel Hill'}]

初始化独热编码器

onehotencoder = DictVectorizer()

对实例进行编码

encodeddata = onehotencoder.fittransform(instances).toarray()

print(encoded_data)

输出:

[[0. 1. 0.]

[0. 0. 1.]

[1. 0. 0.]]

```

文字特征提取 - 词库模型

文本特征提取中最常用的方法之一是词袋模型(Bag of Words)。这种方法可以视为独热编码的一种扩展,为每个单词分配一个特征值。词袋模型的基本思想是忽略文本中的词语顺序,只关注词语出现的频率。

```python from sklearn.feature_extraction.text import CountVectorizer

示例文本集合

corpus = [ 'UNC played Duke in basketball', 'Duke lost the basketball game', 'I ate a sandwich' ]

初始化词袋模型

vectorizer = CountVectorizer()

对文本进行特征提取

transformedcorpus = vectorizer.fittransform(corpus).todense()

print(transformed_corpus)

输出:

[[0 1 1 0 1 0 1 0 0 1]

[0 1 1 1 0 1 0 0 1 0]

[1 0 0 0 0 0 0 1 0 0]]

查看词汇表

print(vectorizer.vocabulary_)

输出:

{'unc': 9, 'played': 6, 'duke': 2, 'in': 4, 'basketball': 1, 'lost': 5, 'the': 8, 'game': 3, 'ate': 0, 'sandwich': 7}

```

对比文档的特征向量

通过对比文档的特征向量,我们可以发现某些文档之间的相似性。例如,在上述文本集合中,前两个文档在特征向量上比第三个文档更相似。我们可以通过计算两个向量的欧氏距离来量化这种相似性。

```python from sklearn.featureextraction.text import CountVectorizer from sklearn.metrics.pairwise import euclideandistances

示例文本集合

corpus = [ 'UNC played Duke in basketball', 'Duke lost the basketball game', 'I ate a sandwich' ]

初始化词袋模型

vectorizer = CountVectorizer()

对文本进行特征提取

counts = vectorizer.fit_transform(corpus).todense()

计算文档间的欧氏距离

for x, y in [[0, 1], [0, 2], [1, 2]]: dist = euclidean_distances(counts[x], counts[y]) print(f'文档{x}与文档{y}的欧氏距离: {dist}')

输出:

文档0与文档1的欧氏距离: [[2.44948974]]

文档0与文档2的欧氏距离: [[2.64575131]]

文档1与文档2的欧氏距离: [[2.64575131]]

```

图片特征提取

数字图像通常由像素组成,每个像素代表图像的一个颜色值。表示图像的基本特征可以将矩阵的每一行连接成一个行向量。光学字符识别(OCR)是机器学习领域中的一个重要应用,可以用来从图像中识别文字。

```python from sklearn import datasets import matplotlib.pyplot as plt

加载手写数字数据集

digits = datasets.load_digits()

显示第一个数字及其标签

print(f'数字: {digits.target[0]}') print(digits.images[0])

显示图像

plt.figure() plt.axis('off') plt.imshow(digits.images[0], cmap=plt.cm.gray_r, interpolation='nearest') plt.show() ```

以上是对原文内容的改写,旨在保持信息准确性和完整性的同时,通过不同的表达方式使内容更加简洁易读。

    本文来源:图灵汇
责任编辑: : Z科技
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
机器东西知道学习
    下一篇