栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习基础-特征工程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习基础-特征工程

机器学习基础篇

机器学习基础
  • 机器学习基础篇
    • 1基础知识点
        • 1、特征工程的定义
        • 2、数据集
          • 1数据集的结构组成:
          • 2数据集类型:
        • 3、认识scikit-learn包
        • 4、数据的特征抽取
        • 5、sklearn特征抽取api
          • 5.1对字典数据特征抽取
          • 5.2对文书数据特征抽取
          • 5.3jieba包
          • 5.4Tfidvectorizer(stop_word=none) as tf
            • 5.4.1CountVectorizer:
            • 5.4.2TfidfVectorizer:
            • 5.4.3什么是TF-IDF?
          • 5.5缺失值的处理
        • 6、特征降维
          • 6.1特征选择
            • 6.1.1训练特征集方法
          • 6.2神经网络

1基础知识点 1、特征工程的定义

利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。简而言之,特征工程就是一个把原始数据转变成特征的过程,这些特征可以很好的描述这些数据,并且利用它们建立的模型在未知数据上的表现性能可以达到最优。

2、数据集 1数据集的结构组成:

特征值+目标值。

2数据集类型:
  • Kaggle 数据。
  • UCI 数据:比较专业。每个领域都有。
  • scikit-learn:数据量小,方便学习。
3、认识scikit-learn包

​ 前提:需要有numpy,pandas基础包

​ 安装包:pip install Scikit-lrean

​ 导入包:import sklearn

​ 作用:

分类classfication
回归regression
聚类clustering
降维dimensionality reduction
模型选择model selection
特征工程preprocessing
4、数据的特征抽取

*特征抽取定义:对文本等数据进行特征值化

导入包
from sklearn.feature_extraction.text import CountVectorizer

# 实例化CountVectorizer

vector = CountVectorizer()

# 调用fit_transform输入并转换数据

res = vector.fit_transform(["life is short,i like python","life is too long,i dislike python"])

# 打印结果
print(vector.get_feature_names())

print(res.toarray())
5、sklearn特征抽取api

​ skl.feature_extraction

5.1对字典数据特征抽取

skl.feature_extraction.DictVectorizer(sparse=true) as dv

细化:

代码用法对象x返回值
dv.fit_trasform(x)输入数据转化字典or包含字典的迭代对象sparse矩阵
dv.inverse_transform(x)sparse矩阵、array数组装换之前的数据格式
dv.get_feature_names()---------返回类别
dv.transform(x)按照原先的标准转换
def dictvec():
    """
    字典数据抽取
    """
    # 实例化,(sparse=False并转化为array数组)
    dict = DictVectorizer(sparse=False)

    # 调用fit_transform
    # 返回sparse矩阵
    data = dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])

    print(dict.get_feature_names())
	# 返回类别
	#out:
    print(dict.inverse_transform(data))
	
    print(data)

    return None
5.2对文书数据特征抽取

skl.feature_extraction.text.CountVectorizer as cv

代码x对象返回值
cv.fit_transform(x)文本or含字符串的可迭代对象sparse矩阵
cv.inverse_tansform(x)array数组orsparse矩阵转化之前的数据格式
cv.get_feature_names()包含数据的所有单词列表
def countvec():
    """
    对文本进行特征值化
    :return: None
    """
    cv = CountVectorizer()

    data = cv.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"])

    print(cv.get_feature_names())

    print(data.toarray())

    return None
5.3jieba包
import jieba
seg_list = jieba.cut("李小福是创新办主任也是云计算方面的专家")  # 默认是精确模式
#添加词
#jieba.add_word('石墨烯')
#删除词
#jieba.del_word('自定义词')
print(", ".join(seg_list))

out:李小福/ 是/ 创新/ 办/ 主任/ 也/ 是/ 云/ 计算/ 方面/ 的/ 专家

def cutword():

    con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")

    con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")

    con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")

    # 转换成列表
    content1 = list(con1)
    content2 = list(con2)
    content3 = list(con3)

    # 吧列表转换成字符串
    #Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。str.join(sequence)
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)

    return c1, c2, c3
if __name__ == "__main__":

5.4Tfidvectorizer(stop_word=none) as tf

​ 分类机器学习的重要方法

代码x对象返回值
tf.fit_transform(x)文本or可迭代对象sparse矩阵
tf.inverse_transform(x)array数组orsparse矩阵转化为之前的数据格式
tf.get_feture_names()返回单词列表
def tfidfvec():
    """
    中文特征值化
    """
    c1, c2, c3 = cutword()

    print(c1, c2, c3)

    tf = TfidfVectorizer()

    data = tf.fit_transform([c1, c2, c3])

    print(tf.get_feature_names())

    print(data.toarray())

    return None
	#输出
	['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[0.         0.         0.21821789 0.         0.         0.
  0.43643578 0.         0.         0.         0.         0.
  0.21821789 0.         0.21821789 0.         0.         0.
  0.         0.21821789 0.21821789 0.         0.43643578 0.
  0.21821789 0.         0.43643578 0.21821789 0.         0.
  0.         0.21821789 0.21821789 0.         0.         0.        ]
 [0.         0.         0.         0.2410822  0.         0.
  0.         0.2410822  0.2410822  0.2410822  0.         0.
  0.         0.         0.         0.         0.         0.2410822
  0.55004769 0.         0.         0.         0.         0.2410822
  0.         0.         0.         0.         0.48216441 0.
  0.         0.         0.         0.         0.2410822  0.2410822 ]
 [0.15698297 0.15698297 0.         0.         0.62793188 0.47094891
  0.         0.         0.         0.         0.15698297 0.15698297
  0.         0.15698297 0.         0.15698297 0.15698297 0.
  0.1193896  0.         0.         0.15698297 0.         0.
  0.         0.15698297 0.         0.         0.         0.31396594
  0.15698297 0.         0.         0.15698297 0.         0.        ]]
    
    
    
def hanzivec():
    """
    中文特征值化
    :return: None
    """
    c1, c2, c3 = cutword()

    print(c1, c2, c3)

    cv = CountVectorizer()

    data = cv.fit_transform([c1, c2, c3])

    print(cv.get_feature_names())

    print(data.toarray())

    return None

	#输出
    ```
    ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
 [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
 [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]
 ```
5.4.1CountVectorizer:

把一个文档转成一个包含词频的矩阵。最后的词频矩阵是用csr_matrix这种稀疏矩阵的表示方式来表示的。

5.4.2TfidfVectorizer:

TfidfVectorizer返回的是tfidf值

5.4.3什么是TF-IDF?

TF-IDF(term frequency-inverse document frequency)词频-逆向文件频率。在处理文本时,如何将文字转化为模型可以处理的向量呢?TF-IDF就是这个问题的解决方案之一。字词的重要性与其在文本中出现的频率成正比(TF),与其在语料库中出现的频率成反比(IDF)。

TF为某个词在文章中出现的总次数。TF = 某个词出现的总次数/总词数。

IDF为逆文档频率。逆文档频率(IDF) = log(词料库的文档总数/包含该词的文档数+1)。

为了避免分母为0,所以在分母上加1。

TF-IDF值 = TF * IDF。

TfidfVectorizer跟CountVectorizer的区别:

CountVectorizer返回的是词频,

TfidfVectorizer返回的是tfidf值

5.5缺失值的处理

pandas: pd.dropna

​ pd,fillna

replace(“?”,np.nan)

6、特征降维 6.1特征选择

训练集特征:就是单纯的从提取的所有特征中选择部分特征

  1. 去掉部分特征相关度比较高的
  2. 部分特征会对预测结果产生影响
  3. 可以改变值可以不改
6.1.1训练特征集方法
  • filter过滤式:variancethreshold(threshould=none);threshould方差,把小于方差的维度数据删除

  • 嵌入式:正则化,决策树

  • 包裹式

def var():
    """
    特征选择-删除低方差的特征
    :return: None
    """
    var = VarianceThreshold(threshold=0.7)

    data = var.fit_transform([[0, 3, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])

    print(data)
    return None
   

#out: [[3 0]
[1 4]
[1 1]]

6.2神经网络

PCA:主成分分析。对于一些数据特征存在相关性,且数据特征特别多时,降低数据维度,数据改变,特征数量减少

PCA(n_components=none) #component:小数0-1(90-95%)

pca.fit_transform(x)

  • x:np.array数据[n_samplrs,n_features]
  • 返回值:转换后的指定维度array

交叉表:pd.crosstab(mt[‘user_id’],mt[aisle’])

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号