机器学习 特征工程和文本特征提取

机器学习 特征工程和文本特征提取

首先下载Scikit-learn库
下载命令 pip install Scikit-learn
通过导入import sklearn
命令查看是否可用
注意:安装Scikit-learn需要Numpy,pandas等库

对字典的特征值化

from sklearn.feature_extraction import DictVectorizer

def dictvec():
    """
    对字典特征值
    return None
    """
    dit = DictVectorizer()#实例化
    data = dit.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature': 60},{'city':'深圳','temperature': 30}])
    print(data)
    return None
if __name__=="__main__":
    dictvec()
    

对文本实例化:

from sklearn.feature_extraction.text import DictVectorizer 
def wenben():
    """
    对文本特征值
    return None
    """
    wb = DictVectorizer()#实例化
    data = wb.fit_transform(['人生苦短,我用python','人生漫长,不用python'])
    print(data.toarray())
    return None
if __name__=="__main__":
    wenben()

对中文实例化:

需要下载 jieba 这个库,对文字进行分词
代码如下:

from sklearn.feature_extraction.text import DictVectorizer
import jieba

def cutword():
    cont1=jieba.cut("今天很残忍,明天更残酷")
    cont2=jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的")
    cont3=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 zhongwen():
    """
    对中文特征值
    return None
    """
    c1,c2,c3=cutword()
    print(c1,c2,c3)
    zw = DictVectorizer()#实例化
    data = zw.fit_transform([c1,c2,c3])
    print(zw.get_feature_names())
    print(data.toarray())
    
    return None
if __name__=="__main__":
    zhongwen()
    

tf-idf分析:

Tf:term frequency :词的频率 出现的次数
idf:逆文档频率 inverse document frequency log(总文档数量/该词出现的文档数量)

数据的特征预处理:
特征处理是通过特定的统计方法(数学方法)将数据转换成算法要求的数据

数据处理分类

数值型数据:标准缩放:1、归一化 2、标准化 3、缺失值
类别型数据:one-hot编码
时间类型:时间的切分

归一化:

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

from sklearn.preprocessing import MinMaxScaler
def mm():
    """
    归一化处理
    return None
    """
    mm=MinMaxScaler(feature_range=(2,3))
    data=mm.fit_transfrom([[90,2,10,40],[60,2,15,45],[75,3,13,46]])
    print(data)
    return None
    
if __name__=="__main__":
    mm()
    

公式:x’=(x-min)/(max-min) x’’=x’*(mx-mi)+mi
注释:作用于每一列,max为一列得到最大值,min为一列的最小值,那么x’'为最终结果,mx,mi分别指定区间默认mx=1,mi=0

三个或多个特征同等重要的时候:进行归一化
目的:是对某一个特征对最终结果不会造成更大的影响

提问:
如果数据中异常点较多,会有什么影响?
答:异常点对最大值最小值影响太大,对最后的值影响大,归一化的鲁棒性较差,只适合传统经过却小数据场景。

标准化:

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

x’=(x-mean)/标准差

注释:作用于每一列,mean为平均值,var为方差,var=(x1-mean)²+(x2-mean)²+……/n(每个特征的样本数)
标准差=var开平方。
其中:方差(考量数据的稳定性)方差越大,数据越分散,方差越小,数据越聚集。

对于标准化来讲,异常点不会对标准化有太大的影响,因为具有一定的数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

方差为0时,这个特征所有值都一样。

sklearn特征化API:scikit-learn.preprocessing.StandardScaler
StandarScaler()处理之后每列来说所有的数据都聚集在均值为0附近标准差为1
StandarScaler.mean_ 查看原始数据中每列特征的平均值
StandarScaler.std_ 查看原始数据每列特征的方差

标准化步骤:

from sklearn.preprocessing import StandardScaler
def bz():
    """
    标准化缩放
    return None
    """
    bz=StandardScaler()
    data=StandardScaler.fit_transform([[2.,-1.,3.],[2.,4.,2.],[4.,6.,-2.]])
    print(data)
    return None
    
if __name__=="__main__":
    bz()
    

标准化总结:
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

缺失值:

如何处理数据中的缺失值:
删除:如果某行或某列数据缺失值达到一定的比列,建议放弃整行或整列(一般不建议用此方法)
插补:可以通过缺失值每行或每列的平均值、中位数来填充

sklearn缺失值API:sklearn.preprocessing.Imputer
数据中的缺失值:np.nan
如果不是则用replace("?",np.nan)进行转换

缺失值步骤:

from sklearn.preprocessing import Imputer
import numpy as np
def im():
    """
    缺失值处理
    return None
    """
    im=Imputer(missing_values='Nan',strategy='mean,axis=0')
    data=im.fit_transfrom([[1,2],[np.nan,3],[7,6]])
    print(data)
    return None

if __name__=="__main__":
    im()

注意:需要导入numpy库,numpy的数组中可以使用np.nan/np.NaN来代替缺失值,属于float类型,
如果是文件中的一些缺失值,可以替换成nan,通过np.array转化成float型的数据即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值