机器学习之算法基础(机器学习概述、特征工程)

第一部分——概述

什么是机器学习

机器学习

为什么学习机器学习

1、解放生产力
2、解决专业问题
3、提供社会便利

机器学习应用场景

1、自然语言处理
2、无人驾驶
3、机器视觉系统
4、推荐系统…等

第二部分——特征工程

数据的特征工程

数据的来源

在这里插入图片描述

数据的类型

在这里插入图片描述

可用的数据集

在这里插入图片描述
常见的数据集数据是由 特征值+目标值 组成的

特征工程是什么

在这里插入图片描述

特征工程的意义

直接影响模型预测的结果

Scikit-learn库介绍

在这里插入图片描述

数据的特征抽取

特征抽取实例

#特征抽取
#
# 导入包
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())
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
[[0 1 1 1 0 1 1 0]
 [1 1 1 0 1 1 0 1]]

在这里插入图片描述
注:特征值化是为了计算机可以更好地理解数据

字典特征抽取

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
代码实例

from sklearn.feature_extraction import DictVectorizer

def dictvec():
    '''
    字典数据抽取
    return:None
    '''
    #实例化
    dict=DictVectorizer()
    #调用fit_transform
    data = dict.fit_transform(
        [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}])

    print(dict.get_feature_names())

    print(dict.inverse_transform(data))

    print(data)

    return None

if __name__=="__main__":
    dictvec()
['city=上海', 'city=北京', 'city=深圳', 'temperature']
[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 60.0}, {'city=深圳': 1.0, 'temperature': 30.0}]
  (0, 1) 1.0
  (0, 3) 100.0
  (1, 0) 1.0
  (1, 3) 60.0
  (2, 2) 1.0
  (2, 3) 30.0

字典特征抽取是把字典中一些表示类别的数据分别转换成特征

one-hot编码

在这里插入图片描述
在这里插入图片描述

文本特征抽取

在这里插入图片描述

CountVectorizer 方法

在这里插入图片描述
在这里插入图片描述

from sklearn.feature_extraction.text import CountVectorizer

def countvec():
    '''
    对文本进行特征值化
    return:None
    '''
    cv=CountVectorizer()
    data=cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])
    print(cv.get_feature_names())
    print(data.toarray())  #将sparse矩阵转化成矩阵数组
    return None
if __name__=="__main__":
    countvec()
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']  
[[0 1 1 1 0 1 1 0]
 [1 1 1 0 1 1 0 1]]

文本特征抽取的步骤:
1、统计所有文章当中的所有词,重复的词只统计一次,单独的字母不统计,作为词的列表
2、对每篇文章中,在词的列表中统计每个词出现的次数

中文文本特征抽取

import jieba
from sklearn.feature_extraction.text import CountVectorizer
def cutword():

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

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

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

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

    # 把列表转换成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)

    return c1, c2, c3



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

if __name__=="__main__":
    hanzivec()
今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。
['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[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]]
Tf-idf 方法

在这里插入图片描述
tf:term frequency 词的频率,出现的次数
idf:inverse document frequency逆⽂文档频率 , log(总⽂文档数量量/该词出现的⽂文档数量量)
在这里插入图片描述
代码示例

from sklearn.feature_extraction.text import TfidfVectorizer
def tfidfvec():
    """
    中文特征值化
    :return: None
    """
    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

if __name__=="__main__":
    tfidfvec()

在这里插入图片描述

特征的预处理

特征预处理是什么

在这里插入图片描述

不同类型数据的预处理方法

在这里插入图片描述

归一化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from sklearn.preprocessing import MinMaxScaler

def mm():
    """
    归一化处理
    :return: NOne
    """
    mm = MinMaxScaler(feature_range=(2, 3))

    data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])

    print(data)

    return None

if __name__=="__main__":
    mm()
[[3.         2.         2.         2.        ]
 [2.         3.         3.         2.83333333]
 [2.5        2.5        2.6        3.        ]]
归一化总结

在这里插入图片描述

标准化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from sklearn.preprocessing import StandardScaler

def stand():
    """
        标准化处理
        :return: NOne
    """
    std=StandardScaler()
    data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])

    print(data)

    return None
if __name__=="__main__":
    stand()
[[-1.06904497 -1.35873244  0.98058068]
 [-0.26726124  0.33968311  0.39223227]
 [ 1.33630621  1.01904933 -1.37281295]]
缺失值

处理方法
在这里插入图片描述
在这里插入图片描述
axis=0表示对列进行操作

import numpy as np
from sklearn.preprocessing import Imputer
def im():
    """
    缺失值处理
    :return:None
    """
    # NaN, nan
    im = Imputer(missing_values='NaN', strategy='mean', axis=0)

    data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])

    print(data)

    return None
if __name__=="__main__":
    im()
[[1. 2.]
 [4. 3.]
 [7. 6.]]

特征选择

特征选择是什么

在这里插入图片描述

主要方法

在这里插入图片描述

VarianceThreshold

在这里插入图片描述
在这里插入图片描述


from sklearn.feature_selection import VarianceThreshold

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

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

    print(data)
    return None
if __name__=="__main__":
    var()
[[0]
 [4]
 [1]]

特征降维PCA方法(减少特征的数量)

在这里插入图片描述
在这里插入图片描述
n_components:为小数时,是指保留的特征数量与全部特征数量的百分比;为 整数时,是指减少到的特征数量

from sklearn.decomposition import PCA


def pca():
    """
    主成分分析进行特征降维
    :return: None
    """
    pca = PCA(n_components=0.9)

    data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])

    print(data)

    return None


if __name__ == "__main__":
    pca()
[[ 1.28620952e-15  3.82970843e+00]
 [ 5.74456265e+00 -1.91485422e+00]
 [-5.74456265e+00 -1.91485422e+00]]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值