Advertisement

机器学习基础【Day1】:文本特征提取和数字特征预处理

阅读量:

记录一些听课时的笔记:

1. pandas: 用于数据读取和基本的格式处理;sklearn:特征处理(特征工程)

2. 特征工程的主要任务包括:进行特征提取、数据预处理以及降维处理。在特征提取过程中涉及的内容包括对文本、字符串等进行转换以获取数值表示。

3. sparse 矩阵:记录角标而不是整个向量,可以节约内存

4. 标准化较归一化更具优越性。由于归一化容易受到异常值的影响,在此情况下其稳定性较差;相比之下,在标准化下均值设为0、标准差设为1。

在处理缺失数据时,请首先识别缺失值的格式——是否为NaN或其他形式?然后,请使用replace函数来将这些特殊标记替换为NaN。

展示一些代码和我的注释:

1.字典数据抽取

复制代码
 # 导入包,其中Imputer导入不了就用SimpleImputer

    
 from sklearn.feature_extraction import DictVectorizer
    
 from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
    
 from sklearn.preprocessing import MinMaxScaler, StandardScaler
    
 from sklearn.impute import SimpleImputer
    
 from sklearn.feature_selection import VarianceThreshold
    
 from sklearn.decomposition import PCA
    
 import jieba
    
 import numpy as np
    
  
    
  
    
  
    
 def dictvec():
    
     """
    
     字典数据抽取
    
     :return: None
    
     """
    
     # 实例化,dict是一个对象
    
     dict = DictVectorizer(sparse=False) 
    
  
    
     # 调用fit_transform,输入列表数据并转换,一共3个样本
    
     data = dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])
    
  
    
     print(data)
    
     # 获取特征的表头
    
     print(dict.get_feature_names())
    
  
    
     # 原数据
    
     print(dict.inverse_transform(data))
    
  
    
     print(data)
    
  
    
     return None
    
  
    
 # 仅在主函数下运行,被import到其他函数是不会被调用的
    
 if __name__ == "__main__":
    
     dictvec()

运行结果:

2. 文本特征抽取

复制代码
 def countvec():

    
     """
    
     对文本进行特征值化
    
     :return: None
    
     """
    
     # cv本来是用来处理英文单词的,如果是单独一个字或者字母,这里就不会显示
    
     cv1 = CountVectorizer()
    
     data1 = cv1.fit_transform(["人生苦短,我喜欢python", "人生漫长,不用python"])
    
     # 也可以手动划分句子
    
     cv2 = CountVectorizer()
    
     data2 = cv2.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"])
    
     # 打印抽取结果
    
     print(cv1.get_feature_names())
    
     # 显示出现频率
    
     print(data1.toarray())
    
  
    
     print(cv2.get_feature_names())
    
  
    
     print(data2.toarray())
    
     return None
    
 # 仅在主函数下运行,被import到其他函数是不会被调用的
    
 if __name__ == "__main__":
    
     countvec()

运行结果:

3. 中文的特征值化

复制代码
 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
    
 # 仅在主函数下运行,被import到其他函数是不会被调用的
    
 if __name__ == "__main__":
    
     hanzivec()

运行结果:

4. TF-IDF

复制代码
 def tfidfvec():

    
     """
    
     # tf-idf 反映词汇的重要性,词频在某文章越高且该词在所有文章中词频越低,重要性越高
    
     :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
    
 # 仅在主函数下运行,被import到其他函数是不会被调用的
    
 if __name__ == "__main__":
    
     tfidfvec()

运行结果:

5. 归一化,标准差,缺失值处理

复制代码
  
    
  
    
 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
    
  
    
  
    
 def stand():
    
     """
    
     标准化缩放
    
     :return:
    
     """
    
     std = StandardScaler()
    
  
    
     data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
    
  
    
     print(data)
    
  
    
     return None
    
  
    
  
    
 def im():
    
     """
    
     缺失值处理
    
     :return:NOne
    
     """
    
     # NaN, nan
    
     im = SimpleImputer(missing_values='NaN', strategy='mean', axis=0)
    
  
    
     data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
    
  
    
     print(data)
    
  
    
     return None

全部评论 (0)

还没有任何评论哟~