机器学习笔记:机器学习概述和特征工程1

一、机器学习简介和概述:

1.影响人工智能的发展:数据和算法

2.分类:(1)自然语言处理:自动报到天气的程序,写新闻

(2)图像识别:人脸识别,图片优化

(3)传统预测:信贷需求预测,店铺销量预测

3.机器学习是:从数据中自动分析获得规律,并利用这些规律对未知数据进行预测。

比如说:AlphaGo(从棋谱中学习数据,打败柯洁)、广告搜索:根据历史行为推荐商品

4.为什么需要机器学习:解放生产力(智能客服)、解决专业问题(ET医疗)、提供社会便利(城市大脑)

5.机器学习的价值:领域需要多,让机器学习程序替代手动的步骤,减少企业的成本也提高企业的效率。

二、特征工程和文本提取

1.数据集的组成

机器学习的数据:文件csv,使用pandas读取数据处理数据,基于numpy

numpy为什么处理速度很快?c编写,GIL锁释放可以进行多线程操作

2.数据集的结构:

数据集:kaggle uci scikit-learn

结构:特征值+目标值

比如说:利用身高、体重、皮肤颜色、头发长度等判断男女

{特征值:身高、体重、皮肤、头发长度 目标值:男、女}

注:有些数据集可以没有目标值

3.特征工程是什么?

提高数据预测的效果

意义:直接影响预测结果

特征抽取:文本、字符串进行特征值化

4.字典特征抽取

作用:对字典数据进行特征化

字典特征抽取API:sklearn.feature_extraction.DicVectorizer

方法:fit_transform(x) x:字典包含字典迭代器

流程:(1)实例化类:DicVectorizer

(2)调用fit_transform方法输入数据并转换(注意返回格式)

使用scipy工具,sparse矩阵(稀疏矩阵);作用:节约内存,方便读取处理

def dictvec():
    '''
    字典特征抽取
    :return:
    '''
    # 实例化
    dict = DictVectorizer(sparse=False)
    # 使用fit_transform
    data = dict.fit_transform([{
        'city':'北京','temperature':100
    },{
        'city':'上海','temperature':60
    },{
        'city': '深圳', 'temperature': 30
    }
    ])
    print(dict.get_feature_names())
    print(data)
    return None
# 结果:
# ['city=上海', 'city=北京', 'city=深圳', 'temperature']
# [[  0.   1.   0. 100.]
#  [  1.   0.   0.  60.]
#  [  0.   0.   1.  30.]]

目的:把字典中一些类别的数据,分别进行转换成特征

处理完数据像one-hot编码

5.文本特征抽取

作用:对文本数据进行特征值化

文本特征抽取API:sklearn.feature_extraction.text.CountVectorizer

返回词频矩阵

对于单个英文字母不统计的原因是一个字母没有分类的依据

def countvec():
    '''
    对文本进行特征值化:
        1.统计文章中所有的词,重复的只看做一次
        2.针对列表把每篇文章,在词的列表里面进行统计每个词出现的次数
        单个字母不统计
    :return:
    '''
    cv = CountVectorizer()
    data = cv.fit_transform(
        ["life is short,i like like python","life is too long,i dislike python"]
    )
    print(cv.get_feature_names())
    print(data_zh.toarray())
    return None

# 结果:
# ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
# [[0 1 1 2 0 1 1 0]
#  [1 1 1 0 1 1 0 1]]

对于中文:汉字以空格分开,就可以统计词,所以要先分词

分词用jieba分词

def cut_word():
    word1 = jieba.cut("今天天气很好")
    word2 = jieba.cut("明天天气很好")
    # 转换成列表 生成器-》列表
    content1 = list(word1)
    content2 = list(word2)
    # 列表转换成字符串
    c1 = " ".join(content1)
    c2 = " ".join(content2)
    return c1,c2

def hanzivec():
    '''
    中文特征值化
    :return:
    '''
    c1,c2 = cut_word()
    print(c1,c2)
    cv = CountVectorizer()
    data = cv.fit_transform([c1,c2])
    print(cv.get_feature_names())
    print(data.toarray())
    return None

# 结果:
# ['今天天气', '天气', '明天']
# [[1 0 0]
#  [0 1 1]]

6.词语占比(tf-idf)

思想:如果某个词或词语在一篇文章中出现的概率高,并且在其它文章中很少出现,认为此词或短语具有很好的类别区分能力,适合用来分类

作用:评估一字词对于一个文件集或语料库中其中一份文件的重要程度。

tf:term frequency 词的频率 出现的次数

idf:逆文档频率 log(总文档数量/该词出现的文档数) log输入的数值越小,结果越小

tf*idf --重要性程度

词语占比API:sklearn.feature_extraction.text.CountVectorizer.TfidfVectorizer

得到的值就是每个词语在文章中的重要性

tf-idf:API:sklearn.feature_extraction.text.TfidfVectorizer

def tfidfvec():
    '''
    中文重要程度
    :return:
    '''
    c1,c2 = cut_word()
    print(c1,c2)
    tf = TfidfVectorizer()
    data = tf.fit_transform([c1,c2])
    print(tf.get_feature_names())
    print(data.toarray())
    return None

# 结果:
# ['今天天气', '天气', '明天']
# [[1.         0.         0.        ]
#  [0.         0.70710678 0.70710678]]

特征预处理

1.了解特征预处理

通过特定的统计方法将数据准换成算法要求的数据。

数值型数据:

标准缩放:(1)归一化(2)标准化

类别性数据:one-hot编码

时间类型:时间的切分

API:sklearn.preprocessing

2.归一化

特点:通过对原始数据进行变换把数据映射到(0,1)之间

公式:x’ = x-min/max-min x’’ = x’ * (mx-mi)+mi

作用于每一列,max为一列的最大值,min为一列的最小值

x’'为最终结果,mx、mi分别为指定区间值默认mx为1

在这里插入图片描述

其实就是将大的数据缩放到0-1之间

归一化API:sklearn.preprocessing.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
# [[3.         2.         2.         2.        ]
#  [2.         3.         3.         2.83333333]
#  [2.5        2.5        2.6        3.        ]]    

三个特征同等重要的时候,进行归一化,使得一个特征对最终结果不会造成更大的影响。

缺点:异常点较多会让最大最小值会影响,鲁棒性较差,会影响效果,适合传统精确小数据场景。

3.标准化:

特点:通过对原始数据进行变换,把数据变换到均值为0,标准差为1的范围内。

标准化公式
作用于每一列

方差大小表示数据的离散性,大就比较离散

解决了归一化异常点问题,对于具有一定量的数据,少量的异常点对于平均值的影响并不大

特征化API:sklearn.preprocessing.StandardScaler

语法:

def stand():
    '''
    标准化缩放
    :return:
    '''
    std = StandardScaler()
    data = std.fit_transform([[1.,-1.,3.],[2.,4.,2.],[4.,6.,-1.]])
    print(data)
# [[-1.06904497 -1.35873244  0.98058068]
#  [-0.26726124  0.33968311  0.39223227]
#  [ 1.33630621  1.01904933 -1.37281295]]

在样本比较多的情况下比较稳定

4.缺失值处理:

删除或填补,一般选择插补(平均值、中位数等)

缺失值API:sklearn.preprocessing.Imputer

pandas处理数据使用dropna,fillna 数据中的缺失值:np.nan 可以把指定想要补充的值使用replace函数填成np.nan进行处理

def im():
    '''
    缺失值处理
    :return:
    '''
    # NAN,nan
    imputer = SimpleImputer(missing_values=NA,strategy="mean")
    data = imputer.fit_transform([[1,2],[NA,3],[7,6]])
    print(data)
# [[1. 2.]
#  [4. 3.]
#  [7. 6.]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值