机器学习基本知识概述

1. 什么是机器学习

在这里插入图片描述

1.1 数据集的构成

pandas:一个数据读取非常方便以及基本的处理格式的⼯具 真正的多线程 4个线程。
  ==*numpy:释放了GIL*==
sklearn:对于特征的处理提供了强大的接口。
机器学习的数据:csv文件
MySQL:
1、性能瓶颈,读取速度
2、格式不太符合机器学习要求数据的格式

1.1.1 数据类型

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

1.1.2 可用数据集

在这里插入图片描述
kaggle地址 | UCI数据集网址|scikit_learn网址

1.1.3 常用数据集数据的结构组成

注意:有些数据集可以没有目标值
在这里插入图片描述
在这里插入图片描述

1.2 特征工程的定义

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

1.2 数据的特征抽取

# 导入包
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)
print(res.toarray())
输出:['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']    
	  (0, 2)	1                        sparse矩阵
	  (0, 1)	1
	  (0, 6)	1
	  (0, 3)	1
	  (0, 5)	1
	  (1, 2)	1
	  (1, 1)	1
	  (1, 5)	1
 	  (1, 7)	1
      (1, 4)	1
	  (1, 0)	1    
	 [[0 1 1 1 0 1 1 0]                   数组
	 [1 1 1 0 1 1 0 1]]

1.2.1 字典特征抽取

字典特征抽取:把字典中的一些类别数据,分别转化成特征值。
在这里插入图片描述

from sklearn.feature_extraction import DictVectorizer
def dictves():
    """
    字典数据抽取
    :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
输出:['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

1.2.2 文本特征抽取及中文问题处理

1.统计所有文章出现的所有词
2.每个词只统计一次
3.单个词不统计
4.文本特征抽取适用于情感分析

def countves(): #适用于情感分析
    """
    对文本进行特征值化
    :return: None
    """
    cv = CountVectorizer()
    data = cv.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"])
    print(cv.get_feature_names())
    print(data.toarray())
    return None
输出:['python', '不用', '人生', '人生漫长', '喜欢', '苦短']
	[[1 0 1 0 1 1]
	 [1 1 0 1 0 0]]        

思考:如何去对中文进行特征值化
在这里插入图片描述
在这里插入图片描述

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import jieba
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])  # 返回的是sparse矩阵

    print(cv.get_feature_names())

    print(data.toarray())
    print(data)  # 返回的是sparse矩阵

    return None

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

通过jieba.cut将句子分割成一个字符串,每个词用空格隔开。

输出:['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[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]]
  (0, 6)	2
  (0, 26)	2
  (0, 22)	2
  (0, 12)	1
  (0, 32)	1
  (0, 31)	1
  (0, 14)	1
  (0, 24)	1
  (0, 19)	1
  (0, 27)	1
  (0, 2)	1
  (0, 20)	1
  (1, 18)	3
  (1, 28)	2
  (1, 23)	1
  (1, 7)	1
  (1, 8)	1
  (1, 3)	1
  (1, 9)	1
  (1, 35)	1
  (1, 17)	1
  (1, 34)	1
  (2, 18)	1
  (2, 16)	1
  (2, 11)	1
  (2, 0)	1
  (2, 21)	1
  (2, 4)	4
  (2, 25)	1
  (2, 5)	3
  (2, 1)	1
  (2, 29)	2
  (2, 13)	1
  (2, 30)	1
  (2, 10)	1
  (2, 15)	1
  (2, 33)	1

1.2.3 tf-df分析问题

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

def tfidfvec():
    """
    中文特征值化
    :return: None
    """
    c1, c2, c3 = cutword()

    print(c1, c2, c3)

    tf = TfidfVectorizer()

    data = tf.fit_transform([c1, c2, c3])
    print(data)

    print(tf.get_feature_names())

    print(data.toarray())

    return None

输出:[[0.         0.         0.21821789 0.         0.         0.
	   0.43643578 0.         0.         0.         0.         0.
       0.21821789 0.         0.21821789 0.         0.         0.
       0.         0.21821789 0.21821789 0.         0.43643578 0.
       0.21821789 0.         0.43643578 0.21821789 0.         0.
       0.         0.21821789 0.21821789 0.         0.         0.        ]      反应的是重要性

1.2.4 特征预处理:归一化和标准化

特征预处理:在这里插入图片描述

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

特征预处理方式:

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

归一化处理:

什么时候进行归一化?
答:多个特征同等重要是进行归一化。
在这里插入图片描述

from sklearn.preprocessing import MinMaxScaler, StandardScaler
def mm():
    """
    归一化处理
    :return: None
    """
    mm = MinMaxScaler()   # feature_range=(2,3) 不写默认(0,1)
    data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])
    print(data)
    return None

输出:[[1.         0.         0.         0.        ]
   	   [0.         1.         1.         0.83333333]
	   [0.5        0.5        0.6        1.        ]]
标准化处理

在这里插入图片描述

from sklearn.preprocessing import MinMaxScaler, StandardScaler
def stand():
    """
    标准化缩放
    :return:
    """
    std = StandardScaler()
    data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])
    print(data)

    return None
归一化和标准化对比

在这里插入图片描述

缺失值处理

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

from sklearn.impute import SimpleImputer  # 0.22版本的sklearn,imputer不在preprocessing里了,而是在sklearn.impute里
import numpy as np
def im():
    """
    缺失值处理
    :return:NOne
    """
    # NaN, nan
    im = SimpleImputer(strategy='mean')

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

    print(data)
    return None
输出:[[1. 2.]
	   [4. 3.]
       [7. 6.]]

1.3 数据的降维之特征选择

什么是特征选择?

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

from sklearn.feature_selection import VarianceThreshold
def var():
    """
    特征选择-删除低方差的特征
    :return: None
    """
    var = VarianceThreshold(threshold=1.0)   # 删除方差默认值为threshold=0.0

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

    print(data)
    return None
输出:[[0]
	  [4]
      [1]]
PCA是什么?

特征数据达到上百时,就要考虑要不要用PCA简化数据。当然数据也会改变,特征数据也会减少。
高纬度数据容易出现的问题:
1.特征之间通常是相关的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PCA如何将一个二维数据简化为一维数据

在这里插入图片描述
在这里插入图片描述
详细说明请详看机器学习之PCA主成分分析博客

from sklearn.decomposition import PCA
def pca():
    """
    主成分分析进行特征降维
    :return: None
    """
    pca = PCA(n_components=0.9)    # 保存90%,如果为整数则为减少到的特征数量

    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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值