机器学习入门(1)

机器学习入门

一.机器学习描述

1.1 什么是机器学习?
数据,模型,预测
数据集的构成:特征值+目标值

1.2 机器学习,深度学习能做什么
机器学习是人工智能的一个实现途径,深度学习的一个方法发展而来。
传统预测
图像识别
自然语言处理

1.3 机器学习算法分类

监督学习:
目标值:类别 – 分类问题
k-近邻算法,贝叶斯分类,决策树与随机森林,逻辑回归,支持向量机,k-均值聚类
目标值:连续型的数据–回归问题
线性回归,岭回归
无监督学习: 目标值:无–无监督学习
聚类 k-means

1.4.机器学习开发流程
1)获取数据
2)数据处理
3)特征工程
4)机器学习算法训练 – 模型
5)模型评估
6)应用

1.5.学习框架和资料推荐
1)算法核心,数据与计算基础
2)推荐:机器学习–“西瓜书” --周志华
统计学习方法 --李航
深度学习 —”花书“

二.特征工程

2.1 数据集

2.1.1 学习阶段可用的数据集
1)sklearn
2) kaggle
3) UCI
Scikit-learn 工具介绍
2.1.2 sklearn数据集
sklearn.datasets
load_* 获取小规模数据集
fetch_* 获取大规模数据集
例如:

# 1. sklearn获取小数据集
sklearn.datasets.load_iris()   
#2. sklearn大数据集
#函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/
#subset:'train'或者'test','all',可选,选择要加载的数据集。
#3. 训练集的“训练”,测试集的“测试”,两者的“全部”
sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
#4. 数据集的返回值
datasets.base.Bunch 
    dict["key"] = values
    bunch.key = values

2.1.3 数据集的划分

训练数据 :用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型是否有效
测试集 20%~30%
sklearn.model_selection.train_test_split(arrays, *options)
x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return 测试集特征训练集特征值值,训练标签,测试标签(默认随机取)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split


def datasets_demo():
    """
    对鸢尾花数据集的演示
    :return: None
    """
    # 1、获取鸢尾花数据集
    iris = load_iris()
    print("鸢尾花数据集的返回值:\n", iris)
    # 返回值是一个继承自字典的Bench
    print("鸢尾花的特征值:\n", iris["data"])
    print("鸢尾花的目标值:\n", iris.target)
    print("鸢尾花特征的名字:\n", iris.feature_names)
    print("鸢尾花目标值的名字:\n", iris.target_names)
    print("鸢尾花的描述:\n", iris.DESCR)

    # 2、对鸢尾花数据集进行分割
    # 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
    print("x_train:\n", x_train.shape)
    # 随机数种子
    x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
    x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
    print("如果随机数种子不一致:\n", x_train == x_train1)
    print("如果随机数种子一致:\n", x_train1 == x_train2)

    return None
    
if __name__ == "__main__":
    #代码1:sklearn数据集使用
    datasets_demo()

2.2 特征工程的介绍
算法 特征工程
2.2.1 为什么需要特征工程
业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

2.2.2 什么是特征工程
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

意义:会直接影响机器学习的效果
pandas:一个数据读取非常方便以及基本的处理格式的工具
sklearn:对于特征的处理提供了强大的接口
特征抽取/特征提取
机器学习算法 – 统计方法 – 数学公式
文本类型—》 数值
类型 ----》数值
2.3.1 特征提取
sklearn.feature_extraction
2.3.2 字典特征提取 – 类别 -》 one-hot编码
sklearn.feature_extraction.DictVectorizer(sparse=True,…)
DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵
DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
DictVectorizer.get_feature_names() 返回类别名称
应用
我们对以下数据进行特征提取

[{'city': '北京','temperature':100}
{'city': '上海','temperature':60}
{'city': '深圳','temperature':30}]

流程分析

#实例化类DictVectorizer
#调用fit_transform方法输入数据并转换(注意返回格式)
from sklearn.feature_extraction import DictVectorizer

def dict_demo():
    """
    字典特征值抽取
    """
    data = [{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}]
    #1.实例化一个转换器类
    transfer = DictVectorizer(sparse=False)

    # 2.调用fit_transfer.fit_transform(data)
    data_new = transfer.fit_transform(data)
    print("data_new: \n",data_new)
    print("特征名字: \n",transfer.get_feature_names_out())

注意观察没有加上sparse=False参数的结果

返回的结果: 稀疏矩阵类型
   (0, 1)    1.0
  (0, 3)    100.0
  (1, 0)    1.0
  (1, 3)    60.0
  (2, 2)    1.0
  (2, 3)    30.0
特征名字:
 ['city=上海', 'city=北京', 'city=深圳', 'temperature']

这个结果并不是我们想要看到的,所以加上参数,得到想要的结果:

返回的结果:
 [[   0.    1.    0.  100.]
 [   1.    0.    0.   60.]
 [   0.    0.    1.   30.]]
特征名字:
 ['city=上海', 'city=北京', 'city=深圳', 'temperature']

总结
对于特征当中存在类别信息的我们都会做one-hot编码处理

应用场景:
1)数据集当中类别特征比较多
1.将数据集的特征–》字典类型
2.DictVectorizer转换
2)本身拿到的数据就是字典类型

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

sklearn.feature_extraction.text.CountVectorizer(stop_words=[])

返回词频矩阵
CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值