前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[scikit-learn 机器学习] 4. 特征提取

[scikit-learn 机器学习] 4. 特征提取

作者头像
Michael阿明
发布于 2020-07-13 07:54:31
发布于 2020-07-13 07:54:31
98600
代码可运行
举报
运行总次数:0
代码可运行

许多机器学习问题需要从 类别变量、文本、图片中学习,需要从中提取出数字特征

1. 从类别变量中提取特征

通常使用 one-hot 编码,产生2进制的编码,会扩展数据,当数据值种类多时,不宜使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.feature_extraction import DictVectorizer
onehot_encoder = DictVectorizer()
X=[
    {'city':'Beijing'},
    {'city':'Guangzhou'},
    {'city':'Shanghai'}
]
print(onehot_encoder.fit_transform(X).toarray())
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

one-hot 编码,没有顺序或大小之分,相比于用 0, 1, 2 来表示上述 3 个city,one-hot编码更好

  • DictVectorizer 只针对 string 变量,如果分类变量是数字类型,请使用 sklearn.preprocessing.OneHotEncoder

this transformer will only do a binary one-hot encoding when feature values are of type string. If categorical features are represented as numeric values such as int, the DictVectorizer can be followed by sklearn.preprocessing.OneHotEncoder to complete binary one-hot encoding.

  • DictVectorizer 对数字特征 失效案列:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
X=[
    {'city':1},
    {'city':4},
    {'city':5}
]
onehot_encoder = DictVectorizer()
print(onehot_encoder.fit_transform(X).toarray())
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[1.]
 [4.]
 [5.]]
  • OneHotEncoder 既可针对 string 类型,也可以对数字类型,进行编码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# string 类型
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
onehot_encoder = OneHotEncoder()
X=[
    {'city':'Beijing'},
    {'city':'Guangzhou'},
    {'city':'Shanghai'}
]
X = pd.DataFrame(X)
print(onehot_encoder.fit_transform(X).toarray())
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 数字类型
onehot_encoder = OneHotEncoder()
X=[
    {'city':1},
    {'city':4},
    {'city':5}
]
X = pd.DataFrame(X)
print(onehot_encoder.fit_transform(X).toarray())
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

2. 特征标准化

  • 防止特征淹没,某些特征无法发挥作用
  • 加快算法收敛
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn import preprocessing
import numpy as np
X = np.array([
    [0., 0., 5., 13., 9., 1.],
    [0., 0., 13., 15., 10., 15.],
    [0., 3., 15., 2., 0., 11.]
])
s = preprocessing.StandardScaler()
print(s.fit_transform(X))

StandardScaler 均值为0,方差为1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ 0.         -0.70710678 -1.38873015  0.52489066  0.59299945 -1.35873244]
 [ 0.         -0.70710678  0.46291005  0.87481777  0.81537425  1.01904933]
 [ 0.          1.41421356  0.9258201  -1.39970842 -1.4083737   0.33968311]]

RobustScaler 对异常值有更好的鲁棒性,减轻异常值的影响

This Scaler removes the median and scales the data according to the quantile range (defaults to IQR: Interquartile Range). The IQR is the range between the 1st quartile (25th quantile) and the 3rd quartile (75th quantile).

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.preprocessing import RobustScaler
s = RobustScaler()
print(s.fit_transform(X))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ 0.          0.         -1.6         0.          0.         -1.42857143]
 [ 0.          0.          0.          0.30769231  0.2         0.57142857]
 [ 0.          2.          0.4        -1.69230769 -1.8         0.        ]]

3. 从文本中提取特征

文本通常为自然语言

3.1 词袋模型

  • 不会编码任何文本句法,忽略单词顺序,忽略语法,忽略词频
  • 可看做 one-hot 的一种扩展,会对文本中关注的每一个单词创建一个特征
  • 可用于文档分类和检索
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
corpus = [
    "UNC played Duke in basketball",
    "Duke lost the basketball game"
]
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
print(vectorizer.fit_transform(corpus).todense())
# [[1 1 0 1 0 1 0 1]
# [1 1 1 0 1 0 1 0]]
print(vectorizer.vocabulary_)
# {'unc': 7, 'played': 5, 'duke': 1, 'in': 3, 
#  'basketball': 0, 'lost': 4, 'the': 6, 'game': 2}
  • 注意:只会提取长度 >= 2 的单词,添加一个句子,该句子的单词 I,a 没有向量化
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
corpus.append("I ate a sandwich and an apple")
print(vectorizer.fit_transform(corpus).todense())
# [[0 0 0 0 1 1 0 1 0 1 0 0 1]
#  [0 0 0 0 1 1 1 0 1 0 0 1 0]
#  [1 1 1 1 0 0 0 0 0 0 1 0 0]]
print(vectorizer.vocabulary_)
# {'unc': 12, 'played': 9, 'duke': 5, 'in': 7, 
#  'basketball': 4, 'lost': 8, 'the': 11, 'game': 6, 
#  'ate': 3, 'sandwich': 10, 'and': 1, 'an': 0, 'apple': 2}
  • 进行文本相似度计算,计算文本向量之间的欧氏距离(L2范数)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.metrics.pairwise import euclidean_distances
X = vectorizer.fit_transform(corpus).todense()
print("distance between doc1 and doc2 ", euclidean_distances(X[0],X[1]))
print("distance between doc1 and doc3 ", euclidean_distances(X[0],X[2]))
print("distance between doc2 and doc3 ", euclidean_distances(X[1],X[2]))
# distance between doc1 and doc2  [[2.44948974]]
# distance between doc1 and doc3  [[3.16227766]]
# distance between doc2 and doc3  [[3.16227766]]

可以看出,文档1跟文档2更相似 真实环境中,词汇数量相当大,需要的内存很大,为了缓和这个矛盾,采用稀疏向量 后序还有降维方法,来降低向量的维度

3.2 停用词过滤

降维策略:

  • 所有单词转成小写,对单词的意思没有影响
  • 忽略语料库中大部分文档中经常出现的单词,如the\a\an\do \be\will\on\around等,称之 stop_words
  • CountVectorizer 可以通过 stop_words 关键词参数,过滤停用词,它本身也有一个基本的英语停用词列表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vectorizer = CountVectorizer(stop_words='english')
print(vectorizer.fit_transform(corpus).todense())
# [[0 0 1 1 0 0 1 0 1]
#  [0 0 1 1 1 1 0 0 0]
#  [1 1 0 0 0 0 0 1 0]]
print(vectorizer.vocabulary_)
# {'unc': 8, 'played': 6, 'duke': 3, 'basketball': 2, 
# 'lost': 5, 'game': 4, 'ate': 1, 'sandwich': 7, 'apple': 0}

我们发现 in\the\and\an不见了

3.3 词干提取和词形还原

停用词列表包含的词很少,过滤后依然包含很多单词怎么办?

  • 词干提取、词形还原,进一步降维

例如,jumping\jumps\jump,一篇报道跳远比赛的文章中,这几个词时分别编码的,我们可以对他们进行统一处理,压缩成单个特征

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
corpus = [
    'He ate the sandwiches',
    'Every sandwich was eaten by him'
]
vectorizer = CountVectorizer(binary=True, stop_words='english')
print(vectorizer.fit_transform(corpus).todense())
# [[1 0 1 0]
# [0 1 0 1]]
print(vectorizer.vocabulary_)
# {'ate': 0, 'sandwiches': 2, 'sandwishes': 3, 'eaten': 1}

我们看到这两个句子表达的一个意思,特征向量却没有一个共同元素

  • Lemmatizer 词性还原 注:NLTK WordNet 安装 参考,解压、添加路径、重新打开python即可
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
corpus = [
    'I am gathering ingredients for the sandwich.',
    'There were many peoples at the gathering.'
]
from nltk.stem.wordnet import WordNetLemmatizer
# help(WordNetLemmatizer)
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('gathering','v')) # gather,动词
print(lemmatizer.lemmatize('gathering','n')) # gathering,名词
  • PorterStemmer 词干提取
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from nltk.stem import PorterStemmer
# help(PorterStemmer)
stemmer = PorterStemmer()
print(stemmer.stem('gathering')) # gather

小例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from nltk import word_tokenize # 取词
from nltk.stem import PorterStemmer # 词干提取
from nltk.stem.wordnet import WordNetLemmatizer # 词性还原
from nltk import pos_tag # 词性标注

wordnet_tags = ['n','v']
corpus = [
    'He ate the sandwiches',
    'Every sandwich was eaten by him'
]
stemmer = PorterStemmer()
print("词干:", [[stemmer.stem(word) for word in word_tokenize(doc)] 
												 for doc in corpus])

# 词干: [['He', 'ate', 'the', 'sandwich'], 
#		['everi', 'sandwich', 'wa', 'eaten', 'by', 'him']]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def lemmatize(word, tag):
    if tag[0].lower() in ['n','v']:
        return lemmatizer.lemmatize(word, tag[0].lower())
    return word
lemmatizer = WordNetLemmatizer()
tagged_corpus = [pos_tag(word_tokenize(doc)) for doc in corpus]

print(tagged_corpus)
# [[('He', 'PRP'), ('ate', 'VBD'), ('the', 'DT'), ('sandwiches', 'NNS')], 
#  [('Every', 'DT'), ('sandwich', 'NN'), ('was', 'VBD'), 
#   ('eaten', 'VBN'), ('by', 'IN'), ('him', 'PRP')]]

print('词性还原:',[[lemmatize(word,tag) for word, tag in doc] for doc in tagged_corpus])
# 词性还原: [['He', 'eat', 'the', 'sandwich'], 
#            ['Every', 'sandwich', 'be', 'eat', 'by', 'him']]

对 n,v 开头的词性的单词进行了词性还原

3.4 TF-IDF 权重扩展词包

词频是很重要的,创建编码单词频数的特征向量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer

corpus = ["The dog ate a sandwich, the people manufactured many sandwiches,\
          and I ate a sandwich"]
          
vectorizer = CountVectorizer(stop_words='english')
freq = np.array(vectorizer.fit_transform(corpus).todense())
freq # array([[2, 1, 1, 3]], dtype=int64)
vectorizer.vocabulary_
#  {'dog': 1, 'ate': 0, 'sandwich': 3, 'people': 2}
for word, idx in vectorizer.vocabulary_.items():
    print(word, " 出现了 ", freq[0][idx]," 次")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dog  出现了  1  次
ate  出现了  2  次
sandwich  出现了  2  次
people  出现了  1  次
manufactured  出现了  1  次
sandwiches  出现了  1
  • sklearn 的TfidfVectorizer 可以统计单词的权值:单词频率-逆文本频率 TF-IDF
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["The dog ate a sandwich, and I ate a sandwich",
          "the people manufactured a sandwich"]
vectorizer = TfidfVectorizer(stop_words='english')
print(vectorizer.fit_transform(corpus).todense())
print(vectorizer.vocabulary_)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[0.75458397 0.37729199 0.         0.         0.53689271]
 [0.         0.         0.6316672  0.6316672  0.44943642]]
{'dog': 1, 'ate': 0, 'sandwich': 4, 'people': 3, 'manufactured': 2}

3.5 空间有效特征向量化与哈希技巧

  • 书上大概意思是说可以省内存,可以用于在线流式任务创建特征向量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.feature_extraction.text import HashingVectorizer
# help(HashingVectorizer)
corpus = [
     'This is the first document.',
     'This document is the second document.'
 ]
vectorizer = HashingVectorizer(n_features=2**4)
X = vectorizer.fit_transform(corpus).todense()
print(X)
x = vectorizer.transform(['This is the first document.']).todense()
print(x)
x in X # True
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[-0.57735027  0.          0.          0.          0.          0.
   0.          0.         -0.57735027  0.          0.          0.
   0.          0.57735027  0.          0.        ]
 [-0.81649658  0.          0.          0.          0.          0.
   0.          0.          0.          0.          0.          0.40824829
   0.          0.40824829  0.          0.        ]]
[[-0.57735027  0.          0.          0.          0.          0.
   0.          0.         -0.57735027  0.          0.          0.
   0.          0.57735027  0.          0.        ]]

3.6 词向量

词向量模型相比于词袋模型更好些。

词向量模型在类似的词语上产生类似的词向量(如,small、tiny都表示小),反义词的向量则只在很少的几个维度类似

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# google colab 运行以下代码
import gensim
from google.colab import drive
drive.mount('/gdrive')
# !git clone https://github.com/mmihaltz/word2vec-GoogleNews-vectors.git
! wget -c "https://s3.amazonaws.com/dl4j-distribution/GoogleNews-vectors-negative300.bin.gz"

!cd /content
!gzip -d /content/GoogleNews-vectors-negative300.bin.gz

model = gensim.models.KeyedVectors.load_word2vec_format('/content/GoogleNews-vectors-negative300.bin', binary=True)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
embedding = model.word_vec('cat')
embedding.shape  # (300,)

相似度
print(model.similarity('cat','dog'))  # 0.76094574
print(model.similarity('cat','sandwich'))  # 0.17211203

最相似的n个单词
print(model.most_similar(positive=['good','ok'],negative=['bad'],topn=3))
# [('okay', 0.7390689849853516), 
#  ('alright', 0.7239435911178589), 
#  ('OK', 0.5975555777549744)]

4. 从图像中提取特征

4.1 从像素强度中提取特征

将图片的矩阵展平后作为特征向量

  • 有缺点,产出的模型对缩放、旋转、平移很敏感,对光照强度变化也很敏感
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn import datasets
digits = datasets.load_digits()
print(digits.images[0].reshape(-1,64))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
图片特征向量
[[ 0.  0.  5. 13.  9.  1.  0.  0.  0.  0. 13. 15. 10. 15.  5.  0.  0.  3.
  15.  2.  0. 11.  8.  0.  0.  4. 12.  0.  0.  8.  8.  0.  0.  5.  8.  0.
   0.  9.  8.  0.  0.  4. 11.  0.  1. 12.  7.  0.  0.  2. 14.  5. 10. 12.
   0.  0.  0.  0.  6. 13. 10.  0.  0.  0.]]

4.2 使用卷积神经网络激活项作为特征

不懂,暂时跳过。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
PHP数组下(数组指针,与数组函数一部分)
数组指针: 一步步来哈 意思是定义一个关联数组,然后是取出第一个 a r r [ 0 ] 的 键 值 ‘ arr[0]的键值` arr[0]的键值‘val=current( a r r ) ; ‘ , 然 后 取 出 第 一 个 arr);`,然后取出第一个 arr);‘,然后取出第一个arr[0]的键名key=key(arr);,然后输出把echo key."-".
贵哥的编程之路
2020/10/28
8400
PHP数组下(数组指针,与数组函数一部分)
【PHP】英文博客专栏PHP快速入门个人笔记
PHP是一个两级分化的语言,觉得它好的人称赞它简单,PHP的语法比较自由上手非常简单。而不好的人则会像我一样认为是个四不像语言,既有前端脚本的影子,但是同时支持面向对象的方式组合代码,总是会有种奇怪的感觉。
阿东
2023/01/24
2.1K0
【PHP】英文博客专栏PHP快速入门个人笔记
彻底搞明白PHP中的include和require
在PHP中,有两种包含外部文件的方式,分别是include和require。他们之间有什么不同呢?
硬核项目经理
2019/12/19
1.6K0
PHP:Phar的打包和使用
Phar是PHP里类似于 Jar 的一种打包文件,可以将整个应用打包,便于部署等。
仙士可
2019/12/18
3.2K0
PHP开发学习笔记(基础篇)
前言 这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程. 个人学习方法分享 全栈开发自学笔记 已开源 [PHP开发学习笔记(面向对象篇)] 稍后更新 [PHP开发学习笔记(框架篇)] 稍后更新 [PHP开发学习笔记(实际应用篇)] 稍后更新 本文阅读建议 1.一定要辩证的看待本文. 2.本文并不会涉及到PHP详细知识点,只陈述在学习PHP过程中遇到的关键点. 3.PHP依照其开发应用分为'基础篇,面向对
筑梦师winston
2018/05/15
2.3K0
PHP性能规范
如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。
sunsky
2020/08/20
1.1K0
PHP入门之函数
之前对PHP的类型、运算符和流程控制简单说了一下。想了解的,这是地址。 PHP入门之类型与运算符 PHP入门之流程控制 下面对函数简单说一下。
雪痕@
2020/09/27
3260
PHP笔记
PHP(Hypertext Preprocessor)即超文本预处理器,是在服务器中执行的脚本语言,WEB开发可以并入HTML,主要作用帮助开发人员快速开发动态网页。
腿子代码了
2023/12/23
2140
PHP笔记
php上传图片并预览
php上传文件并预览功能.我使用的是phpstudy. 请现在D:\phpstudy_pro\WWW下面新建一个uploads文件夹(文件上传后就存储在uploads哪里哈)
贵哥的编程之路
2022/09/29
5.5K0
php上传图片并预览
9个必须掌握的实用PHP函数和功能
即使使用 PHP 多年,也会偶然发现一些未曾了解的函数和功能。其中有些是非常有用的,但没有得到充分利用。并不是所有人都会从头到尾一页一页地阅读手册和函数参考! 1、任意参数数目的函数 你可能已经知道,PHP 允许定义可选参数的函数。但也有完全允许任意数目的函数参数的方法。以下是可选参数的例子: // function with 2 optional arguments function foo($arg1 = ”, $arg2 = ”) { echo “arg1: $arg1n”; echo “arg2:
wangxl
2018/03/07
9450
php案例:(搜索文件)
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 前言 1.php 效果 前言 学习学习怎么搜索文件是否在某个目录下存在 1.php <?php //
贵哥的编程之路
2022/10/24
1.7K0
php案例:(搜索文件)
PHP实现类的自动加载,构建一个面向对象(OOP)的应用
在编写面向对象(OOP) 程序时,通常是一个类新建一个 PHP 文件。 然而,在调用其他类的时候都需要去包含(include或require)这个类所在的php文件。
技术圈
2025/01/12
310
PHP实现类的自动加载,构建一个面向对象(OOP)的应用
php基础知识详解()解析变量1
记住了,兄弟们,运行开头一定要写localhost哈,不要写其他乱七八槽的哈,不要写什么htdocs/。。。。的,告诉你,这没用,固定就这样。localhost/php文件名 问题?后面要加分号;吗? 不需要,为什么,我也不知道,固定写法就这样啊啊
贵哥的编程之路
2020/10/28
1.8K0
php基础知识详解()解析变量1
php://协议深入理解
今天晚上,听了漏洞银行的大咖公开课讲的内网渗透,感觉和大咖之间还有不少差距,不过搞到了一波工具,心里依然美滋滋~
V站CEO-西顾
2018/06/16
2.7K1
一起来学PHP代码审计 | 新手入门篇
代码审计指的是对源代码进行检查,寻找代码中的bug和安全缺陷,这个是一项需要多方面技能的技术,所以我们需要掌握编程,漏洞原理,还要了解系统服务和中间件等。但是这对我们小白来说,可能就是一个“代码审计之从入门到放弃”的悲惨故事,所以我们的学习路线很重要,这里我们就一起来制定一个学习路线理清我们的学习思路。
陌涛
2020/06/10
2.2K0
PHP八大设计模式「建议收藏」
总结:通过以上代码,可以看到,在不同的命名空间下,可以有相同的类名或者方法名。
全栈程序员站长
2022/09/17
4110
PHP八大设计模式「建议收藏」
php函数基础(一)
有效的函数名以字母或下划线开头,后面跟字母,数字或下划线,注意:不能用数字开头。
全栈程序员站长
2022/07/08
9110
php函数基础(一)
PHP函数下+数组一部分
记住,兄弟们,常量没用作用域,只有变量才有哈 我们来聊一下静态局部变量 静态局部变量首先他是一个局部变量,然后被关键字static修饰 让静态局部变量销毁会两种途径,第一:使用unset函数。第二:这个.php文件执行完毕后销毁 而普通的局部变量是这个所在函数执行完之后就自动销毁。 普通的变量是怎么样的?
贵哥的编程之路
2020/10/28
3970
PHP函数下+数组一部分
php函数中
参数的数量: 通常情况下,形式参数的数量应该和实际参数的数量保持一致。但是也不是必须遵守这个规则。 比如在定义形式参数的时候,只有一个形参,我们在填写实参的时候,可以填写100个。 但是如果实际参数的数量小于形式参数,那么就会触发错误。
贵哥的编程之路
2020/10/28
3.3K0
任意文件包含漏洞(1)
文件包含漏洞:即file inclusion 指当服务器开启allow_url_include选项时,就可以通过PHP的某些特性函数(include(),require()和include_once(),requir_once()),去包含任意文件。此时如果对文件来源不严格过滤审查,就容易包含恶意文件。而攻击者可以通过构造这个恶意文件来达到目的。
宸寰客
2020/08/25
1.3K0
任意文件包含漏洞(1)
相关推荐
PHP数组下(数组指针,与数组函数一部分)
更多 >
LV.1
海南伊索网络科技有限公司php工程师
目录
  • 1. 从类别变量中提取特征
  • 2. 特征标准化
  • 3. 从文本中提取特征
    • 3.1 词袋模型
    • 3.2 停用词过滤
    • 3.3 词干提取和词形还原
    • 3.4 TF-IDF 权重扩展词包
    • 3.5 空间有效特征向量化与哈希技巧
    • 3.6 词向量
  • 4. 从图像中提取特征
    • 4.1 从像素强度中提取特征
    • 4.2 使用卷积神经网络激活项作为特征
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文