【机器学习】机器学习大白话初认识,及使用sklearn框架实践流程 含源码

一、基础理解

整个流程:在这里插入图片描述
在这里插入图片描述

二、机器学习数据处理

2.1 数据

数据结构:特征值 + 目标值(有些无)
在这里插入图片描述
我们举个例子便于初步了解:假设有10000万动物照片,目标是分辨猫和狗,则特征值是猫狗的特征(鼻子、毛发等),则目标值为猫、狗。


附可用数据集:scikit-learn√、Kaggle、UCI(即这里面有上述例子的10000万动物照片或其它数据)
在这里插入图片描述


2.2 数据的基本处理

就上述例子,我们需要对10000万照片里面非常模糊、空白(缺失值)等坏照片进行处理掉。
最终达到一个效果:留下与目标相关系的特征(提示:除了猫狗、掺杂的风景照片也是有益的,原因:猫狗照片用于分辨猫狗;风景照片用于分辨非猫狗,我们要除掉的只是坏照片。)

2.3 特征工程

2.3.1特征工程简介

首先,我们电脑只认数字。
所以,我们就得把就上述照片转化为数字(为什么能转化为数字?因为图片由颜色、尺寸等组成,这些在电脑中都有相应的数字表示如黑色是[0, 0, 0])。


附特征工程官方解释:将原始数据转化为更好地代表预测模型的潜在问题的过程,目的提高未知数据的预测准确性


即特征工程我们就得把这些非数字的数据,转化为电脑认得的数字,同时,因为数字(特征值)有可能有些过大过小、有些对整体数据影响不大或过多重复累赘等,所以特征工程也是把这些问题处理掉的一个过程。

2.3.2 特征工程工具

工具:pandas、机器学习sklearn框架(另:内部适用numpy计算)
sklearn框架内含:
在这里插入图片描述
安装(使用scikit-learn框架):

$ makevirtualenv -p /usr/bin/python3.5 ml3
$ workon x
$ pip3 install Scikit-learn
2.3.3 数据的特征提取(转化为数字)

分为 字典特征提取、文本特征提取 。

sklearn特征提取API类:sklearn.feature_extraction

  • 字典特征提取
    把字典中类别数据,分别提取出来转换成特征
    如:
    字典[{“name”: “hyl”, “age”: 23}, {“name”: “lyh”, “age”: 22}]
    转换成[‘age’, ‘name=hyl’, ‘name=lyh’]这三个特征值,并用相应数字表示。
类:sklearn.feature_extraction.DictVectorizer

DictVectorizer(sparse=True,...) #Sparse:是否转换为sparse矩阵
DictVectorizer.fit_transform(X) #X:字典,返回sparse矩阵

在这里插入图片描述
在这里插入图片描述
实际原理:在这里插入图片描述
在这里插入图片描述利用one-hot编码解析

DictVectorizer.inverse_trasform(X) #X:array数组/sparse矩阵
DictVectorizer.get_feature_names() #返回类别名称
DictVectorizer.transform(X) #按照原先标准转换
  • 文本特征提取
    把文本中的单词、组词提取出来,可作用于 文本分类(单个字母/字不作分类)、情感分析
    中文分词工具:jieba
    在这里插入图片描述
类:sklearn.feature_extraction.text.CountVectorizer

CountVectorizer()
CountVectorizer.fit_transform(X)

在这里插入图片描述
在这里插入图片描述
把文本句子提取了各个不重复的词,统计了每句话中该词出现的次数

CountVectorizer.inverse_trasform(X)
CountVectorizer.get_feature_names()
类:sklearn.feature_extraction.text.TfidfVectorizer 

# tf:词的频率:词在该文档出现次数 、idf:拟文档频率:log(总文档库(???)数量/存在该词的文档数量)
  计算重要性:tf * idf(tf-idf值与该词的出现频率成正比,与在整个语料库中的出现次数成反比,符合之前的分析)
TfidfVectorizer(stop_words=None,...)
TfidfVectorizer.fit_transform(X)

在这里插入图片描述
在这里插入图片描述
重要性数值

TfidfVectorizer.inverse_trasform(X)
TfidfVectorizer.get_feature_names()
2.3.4 数据的预处理(处理数字过大过小等)

通过数学方法将 数据(数字) 转换成算法要求的数据。
分为 数值型数据处理(归一化、标准化、缺失值)、类别型数据处理(one-hot编码)、时间型数据处理(时间切分)、降维(特征选择、主成分分析、)

  • 数值型数据 标准缩放:归一化
    把数据进行转换映射到[0,1](默认)区间内
    总结:容易受异常点影响,适用于精确小量数据
    在这里插入图片描述
类:sklearn.preprocessing

MinMaxScalar(featrue_range=(0,1)..) #featrue_range:数据归一化到一定范围内
MinMaxScalar.fit_transform(X) #X:number array数据,返回相同形状array

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

  • 标准化
    把数据进行转换到均值为0,标准差为1的范围内
    总结:少量异常点对平均值影响不大,方差改变小,适用较多情景
    在这里插入图片描述
类:sklearn.preprocessing.StandarScaler

StandardScaler()
StandardScaler.fit_transform(X) #X:number array数据,返回相同形状array
StanderdScaler.mean_
StanderdScaler.std_

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

  • 缺失值
  • 类别型数据:one-hot编码(即特征提取中的处理方法)
  • 时间类型:时间的切分
  • 降维
    此处维度:特征的数量
    主要去除特征:冗余:部分特征相似度高、耗性能
    噪声:部分特征对预测结果有影响
    :特征选择
    主要方法: Filter(过滤式):VarianceThreshold
    Embedded(嵌入式):正则化、决策树
    Wrapper(包裹式)
    神经网络
类:sklearn.feature_selection.VarianceThreshold

VarianceThreshold(threshold = 0.0) #threshold:方差值
Variance.fit_transform(X) #X:number array格式数据,返回值中:低于threshold的特征将被删除

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

  • 主成分分析(特征数量多选用)
    特征数量大,可运用PCA技术(不仅把维度降低,也会使数据少量损失)简化数据的同时损失最少,最终获得更简化有效数据。
    解释如图:(找到这样一条最好的直线)
    在这里插入图片描述
    作用:削减回归分析/聚类分析中特征数量(这些算法是必须使用PCA)
类:sklearn.decomposition

PCA(n_components=None) #n_components:小数:保留数据数量,一般90%~95%;整数:保留的特征数量,如1、2、3...
PCA.fit_transform(X) #X:number array格式数据,返回指定维度的array

附 数据基本处理中的合并表
表格合并:
在这里插入图片描述
做出项目所需表格
在这里插入图片描述


在这里插入图片描述
观察发现上面很多特征值为0的特征很多(冗余),进行降维(PCA):
在这里插入图片描述
查看降维结果,降维到了27个特征:
在这里插入图片描述
在这里插入图片描述

三、机器学习算法

3.1 数据类型

  • 离散型数据:记录不同类别个数的数目所得到的数据,范围内无法再细分(即细分后无意义),是一个一个数出来,一般是整数。如人是1个,不能是1.1个;如猫 狗可分类为0 1
  • 连续型数据:变量可在范围内取任意一个数,取值可以连续的,一般是小数。 如长度可在0~无穷范围内任取一个数;如预测票房

3.2 算法分类

  • 监督学习:根据以往数据(特征值+目标值)预测新数据(即其目标值)
     分类 k-近邻算法√、决策树√与随机森林、逻辑回归、贝叶斯分类、神经网
     回归 线性回归√、岭回归
     标注 隐马尔可夫模型
  • 无监督学习:对一组数据根据(特征值)相似度进行分组。如分出范围内的图形是○还是△
     聚类 k-means
    (√ 为本章解析的算法,举例阐述相应适用场景)

附每个算法在Sklearn中的估计器(实现算法的api):

· 分类	sklearn.neighbors K-近邻
        sklearn.nalve_bayes 贝叶斯
        sklearn.linear_model.LoglstcRegression 逻辑回归
        sklearn.tree 决策树与随机森林

· 回归 	sklearn.linear_model.LinearRegression 线性回归
        sklearn.linear_model.Ridge 岭回归

  • 每个算法都提供的api:fit(x_train, y_train):把训练集传给算法
    predict(x_test):用测试集得出预测值
    score(x_test, y_test):预测的准确率 #(用x_test得出预测值,与y_test的正确结果进行比较)
3.2.1 KNN(K-近邻)

如果一个样本在特征空间中,k个最相似(即与该样本“距离”最邻近)的样本中的大多数属于某一类别,则该样本也属于这个类别。
如:5与k个数(6,7,8,0.1)中的大多数(6,7,8)属于整数类别,则5属于整数类别。
距离公式(欧氏距离): 在这里插入图片描述
运用场景eg:预测未知电影属于哪个类别
在这里插入图片描述
优:简单理解,无需训练
缺:计算量大(即内存需求大),必须指定K值

类:sklearn.neighbors.KNeighborsClassifier()

KNeighborsClassifier(n_neighbors=k)

附案例:一定范围内,预测用户签到位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上为knn基本流程,我们可以看到n_neighbors是需要自行设置的值,那我们如何知道哪个值为最佳:

  • 网络搜索(超参数搜索)
    超参数(需手动指定的参数,如knn中的k值)就需要用交叉验证来进行评估,最后选出最优参数组合建立模型
    在这里插入图片描述
类:sklearn.model_selection.GridSearchCV()
GridSearchCV(estimator, param_grid=None, cv=None) #estimator:估计器对象;param_grid:估计器参数 eg:{“n_neighbors”:[1,3,5]} ;cv:指定几折交叉验证

结果分析:
best_score_:交叉验证中最好结果
Best_estimator_:最好的参数模型
cv_results_:每次交叉验证后的结果(测试集准确率、训练集准确率)
在这里插入图片描述

以上为直接学习测试,若需要在学习的时候验证一下,则需添加验证集以及适用验证方法:

  • 交叉验证(详看后续深度学习)
    在 训练集 中分成n等份(训练集与验证集),然后经过n组测试(每组验证集不同)得到n组模型结果,然后求平均值作为最终结果(即称为n折交叉验证)
    在这里插入图片描述

3.2.2 决策树

应用场景:预测是否能银行贷款在这里插入图片描述
实际划分:根据信息增量(等决策树算法,基尼系数划分更细)进行先判断:
在这里插入图片描述在这里插入图片描述
信息熵、条件熵(信息增量):信息熵是固定的,信息增量越大,该特征最有特征。如下
在这里插入图片描述
在这里插入图片描述
优:简单理解,树木可视化;
缺:过拟合(过于精细每一个条件都有其准确结果,导致测试集出现缺失值结果出错概率高)现象。
改进:减枝cart算法(如决策树api中max_depth)、随机森林(本学习不包含)

类:sklearn.tree.DecisionTreeClassifier
DecisionTreeClassifier(criterion=’gini’,max_depth=None, random_state=None) #criterion:默认’gini’系数(也可选信息增益的熵’entropy’;max_depth:树的深度大小;random_state:随机树种子(本次学习不包含)
决策树结构及本地保存(导出dot格式):
类:sklearn.tree.export_graphviz() 
tree.export_graphviz(estimator, out_file=’tree.dot’,feature-names=[“,”])

安装dot转换(pdf、png)工具:graphviz,命令运行:
dot -Tpng tree.dot -o tree.png

附案例:预测泰坦尼克号上的生死
数据来源:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3.2.3 线性回归

由自变量(特征值)与因变量(目标值)组成的线性组合模型,根据特征与其权重来预测结。
主要思想函数:在这里插入图片描述 如:
在这里插入图片描述
主要目的:通过线性回归找到最优的权重
应用场景:销售额预测,房价、股票预测

损失函数(即预测的与真实的误差大小):最小二乘法
在这里插入图片描述(特征值与其权重组合预测函数 - 真实值)
寻最优w(损失函数最小)的方法:
1)正规方程(不常用)
在这里插入图片描述

类:sklearn.linear_model.LinearRegression

2)梯度下降
在这里插入图片描述

类:sklearn.linear_model.SGDRegression

误差评估:均方误差评价机制: 在这里插入图片描述(预测值 - 真实值)

类:sklearn.metrics.mean_squared_error

mean_squared_error(y_true, y_pred)
y_true、y_pred:真实值、预测值(标准化前的值),返回浮点数结果

附案例:波士顿房价预测(sklearn数据集)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


个人代码行已存储在github:https://github.com/onlyhyl/Artificial-Intelligence/tree/master/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本教程为官方授权出品伴随着大数据时代的到来,作为发掘数据规律的重要手段,机器学习已经受到了越来越多的关注。而作为机器学习算法在大数据上的典型应用,推荐系统已成为各行业互联网公司营销体系中不可或缺的一部分,而且已经带来了真实可见的收益。目前,推荐系统和机器学习已经成为各大公司的发力重点,众多知名公司(如亚马逊、netflix、facebook、阿里巴巴、京东、腾讯、新浪、头条等)都在着眼于将蕴在庞大数据中的宝藏发掘出来,懂机器学习算法的大数据工程师也成为了新时代最紧缺的人才。精心打造出了机器学习与推荐系统课程,将机器学习理论与推荐系统项目实战并重,对机器学习和推荐系统基础知识做了系统的梳理和阐述,并通过电影推荐网站的具体项目进行了实战演练,为有志于增加大数据项目经验、扩展机器学习发展方向的工程师提供更好的学习平台。本课程主要分为两部分,机器学习和推荐系统基础,与电影推荐系统项目实战。第一部分主要是机器学习和推荐系统基础理论的讲解,涉及到各种重要概念和基础算法,并对一些算法用Python做了实现;第二部分以电影网站作为业务应用场景,介绍推荐系统的开发实战。其中包括了如统计推荐、基于LFM的离线推荐、基于模型的实时推荐、基于内容的推荐等多个模块的代码实现,并与各种工具进行整合互接,构成完整的项目应用。通过理论和实际的紧密结合,可以使学员对推荐系统这一大数据应用有充分的认识和理解,在项目实战中对大数据的相关工具和知识做系统的回顾,并且可以掌握基本算法,入门机器学习这一前沿领域,为未来发展提供更多的选择,打开通向算法工程师的大门。谁适合学:1. 有一定的 Java、Scala 基础,希望了解大数据应用方向的编程人员2. 有 Java、Scala 开发经验,了解大数据相关知识,希望增加项目经验的开发人员3. 有较好的数学基础,希望学习机器学习和推荐系统相关算法的求职人员

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值