机器学习入门(一)个人学习笔记

写在前面,学习完爬虫的知识,下一步打算学习机器学习的相关知识,课程来源同样来自于 黑马程序员:http://yun.itheima.com/course/366.html

第一课 特征工程及数据的处理

数据集

  • Kaggle:数据量大,准确,数据真实
  • UCI:收录数据集比较专业,覆盖领域广泛
  • scikit-learn:自带数据集,数据量比较小,方便学习
  • 常用数据集的结构
    • 结构 = 特征值 + 目标值
    • Pandas工具 sklearn模块

特征工程

  • 特征工程是什么
    • 将原始数据转换为更好的代表预测模型的潜在问题的特征的过程,从而提高了对未知数据预测的准确性
  • 特征工程的意义
    • 直接影响预测结果
  • scikit-learn工具
    • python语言机器学习工具
    • 包含很多机器学习算法的实现
    • 文档完善,容易上手
    • 稳定版本0.19
  • 数据的特征抽取
    • sklearn特征抽取API:sklearn.feature_extraction

      • 对字典进行特征抽取
      • 把字典中的一些类别数据,分别转化为特征
      • 类: sklearn.feature_extraction.DictVectorizer
        • 处理完了之后默认返回sparse矩阵格式,为了节约内存,方便读取处理
      • 数组形式,有类别的特征,先要转换为字典数据
    • one-hot编码:把类别抽取成one-hot编码防止错乱

    • 文本特征抽取

      • 类sklearn.feature_extaction.text.CountVectorizer
      def countVec():
          cv = CountVectorizer()
          data = cv.fit_transform(["life is short, i use python","life is too long , i dislike use python"])
          print(cv.get_feature_names()) #统计文章中出现的词
          print(data.toarray()) #对每篇文章进行统计每个词出现的次数
          return None
      

      [图片上传失败...(image-9bd1d-1535030367186)]

      注意:单个字母不统计,因为单个字母的词没有分类标准,这也可以反映出,文本分析的一个应用就是分析文章的感情倾向。

      • 中文字符处理:

        • jieba模块的导入
          • pip3 install jieba
        • con = jieba.cut("待分词的文章")

        这个时候返回的是一个迭代器(分类器),还没有达到我们在countVec中需要的

        • content = list(con)

        把结果转化为列表

        • "".join(conte)

        转字符串

       
       def cutwords():
         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
      

      我们在countVec中需要的是一个字符串列表,我们可以把countVec中的两个句子换成中文,不难发现,如果中文字符串不做任何处理,直接交由实例进行处理,分词默认的法则是按“中断字符”(我这么称呼它,就是两个词语之间的中断,如空格 逗号),当我们用jieba库进行处理之后,得到的其实是一个词语的迭代器,我们先把它转化为字典,再转化为字符串,事实上就是去给原来的句子中的分词加上空格,这个其实也可以由我们自己来做,但如果比较长的文章,这么做肯定是不合适的。

      • tf*idf 重要性程度
        • TF(term frequency)词频
        • idf(inverse document frequency) 逆文档频率
          • 计算方法:log(总文档数量/该词出现的文档数量)
        • 类:sklearn.feather_extraction.text.TfidfVectorizer
          • TfidfVectorizer(stop_words = None,...)
        def TfidfVec():
            c1,c2,c3 = cutwords()
            print("分词结果1:", c1)
            print("分词结果2:", c2)
            print("分词结果3:", c3)
            TfidfVec = TfidfVectorizer()
            data = TfidfVec.fit_transform([c1,c2,c3])
            print(TfidfVec.get_feature_names())
            print(data.toarray())
            return None
        
        • 应用场景相比countVec更好一些。
  • 数据的特征预处理
    • 对数据进行处理:通过特定的统计方法(数学方法),把数据转换成算法需要的数据。
    • 类: sklearn.preprocessing
    • 归一化
      • 通过对原始数据进行变换,把数据映射到(默认[0,1])之间
      • 目的:使得某一个特征,对结果不会造成更大的影响
        [图片上传失败...(image-66c8b8-1535030367186)]
      • 实例化 'MinMaxScalar'
      • 通过 fit_transform转换
      • 数据中异常点较多,此时归一化的效果就不是很好,所以归一化的鲁棒性较差,只适合传统的精确小数据场 景。

    K-近邻算法:计算每两个点之间的欧氏距离,需进行归一化的原因是,使任何一个特征值对结果的影响是一样的(可控制的)。

    • 标准化
      • 特点:通过对原始数据进行变换把数据变换到均值为0,方差为1的范围内。
        [图片上传失败...(image-a71870-1535030367186)]
      • 标准化的优势是用到平均值(求方差和标准差),所以异常点对整体影响不大。其中方差,考量了数据的稳定性,可以直接看出数据的离散程度(数据比较集中,则方差较小,数据分散,方差较大)。当数据具有一定规模时,少量的异常点,对整体影响不大。
      • StandardScaler()
        • 处理之后每列来说所有数据都聚集在均值为0标准差为1
        • StandardScaler.fit_transform(X)
          • X是numpy array格式的shuj
          • 返回值是相同形状的array
        • StandardScaler.means_
          • 原始数据中每列特征的平均值
        • StandardScaler.std_
          • 原始数据中每列特征的方差
  • 数据的降维
    • 维度:特征的数量
    • 特征选择:
      • 从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前后可以改变值,也可以不改变值。但选择后的特征维度肯定比选择前小。
    • 特征选择的原因
      • 冗余:部分特征相关度高,容易消耗计算机性能
      • 噪声:部分特征对预测结果有影响
    • 主要方法:过滤式(Filter)、嵌入式(Embadded)、包裹式(Wrapper)
      • 过滤式 特征选择 API:
        • sklearn.feature_selection.VarianceThreshold
    • ** 神经网络 ** 也是一种重要的特征选择方法
    • 主成分分析(PCA):使数据维数压缩,尽可能降低源数据的维数(复杂度),损失少量信息。
      • 特征数量很多(几百个以上)
      • 考虑数据简化
      • 数据会改变,特征数量会减少,但所有数据信息不会损耗很大。
      • 可以削弱回归分析或者聚类分析中特征的数量
      • 问题:特征之间是相关的
      • PCA语法:
        • PCA(n_components = None)
          • 参数n_components有两个选择
          • 小数的时候(01之间)是保留的特征部分,一般取90%95%
          • 整数的时候,是特征删除后,还剩下的维度。
        • PCA.fit_transform()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容