1️⃣了解什么是机器学习 2️⃣了解机器学习sklearn库的简介、安装 3️⃣掌握使用sklearn转换器处理数据的方法 4️⃣构建并评价线性回归模型 |
机器学习是人工智能 (AI) 和计算机科学的分支,专注于使用数据和算法来模仿人类学习的方式,逐渐提高其准确性。
机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式,,并将现有内容进行知识结构划分来有效提高学习效率。
机器学习是人工智能及模式识别领域的共同研究热点,其理论和方法已被广泛应用与解决工程应用和科学领域的复杂问题。搜索引擎、五人驾驶、机器翻译、医疗诊断、垃圾邮件过滤、玩游戏、人脸识别、数据匹配、信用评级和给图片加滤镜等任务都用到了机器学习。
机器学习属于人工智能的一部分,可以分为监督学习与非监督学习俩种。
监督学习:给定的数据集有已知的标签可以进行学习,一般有分类和回归问题;
非监督学习:给定等等数据集没有可以进来学习的 标签,一般有聚类和强化学习。
机器学习就是从数据上建立模型的学习算法,有了算法之后,将经验(数据)提供给算法,算法就能够基于经验(数据)产生模型(学习结果);当提供经验之外的数据时,模型就能够依据经验提供相应的判断。计算机从数据种学习出规律和模式,以应用在新数据上做预测的任务。机器学习研究的是计算机怎么模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身。
机器学习模型图
机器学习流程:数据预处理—模型训练(模型调参)—模型评估—新样本预测,机器学习的应用工作是围绕着数据与算法展开的,数据的质和量对算法有很大影响。
人类学习模型图
数据预处理很重要且繁琐,60%-70%的时间会放在数据预处理上,20%-30%的时间放在模型学习和模型评估上。数据好坏决定了模型效果的上限,而使用不同算法的目的知识去逼近这个上限。
机器学习、深度学习和神经网络都是人工智能的子领域。 但是,深度学习实际上是机器学习的一个子领域,而神经网络则是深度学习的一个子领域。
深度学习和机器学习的不同之处在于每个算法如何学习。 深度学习可以自动执行过程中的大部分特征提取,消除某些必需的人工干预,并能够使用更大的数据集。 可将深度学习视为“可扩展的机器学习”,就如 Lex Fridman 在这个 MIT 讲座 (00:30) 中 (链接位于 IBM 外部)所述的那样。 常规的机器学习,或叫做“非深度”机器学习,更依赖于人工干预进行学习。 人类专家确定一组特征,以了解数据输入之间的差异,通常需要更为结构化的数据以进行学习。
“深度”机器学习则可以利用标签化的数据集,也称为监督式学习,以确定算法,但不一定必须使用标签化的数据集。 它可以原始格式(例如文本、图像)采集非结构化数据,并且可以自动确定区分不同类别数据的特征集。 与机器学习不同,它不需要人工干预数据的处理,使我们能够以更有趣的方式扩展机器学习。 深度学习和神经网络目前的成就,主要归功于计算机视觉、自然语言处理和语音识别等领域的突飞猛进。
神经网络也称为人工神经网络 (ANN),由节点层组成,包含一个输入层、一个或多个隐藏层和一个输出层。 每个节点也称为一个人工神经元,它们连接到另一个节点,具有相关的权重和阈值。 如果任何单个节点的输出高于指定的阈值,那么该节点将被激活,并将数据发送到网络的下一层。 否则,不会将数据传递到网络的下一层。 深度学习中的“深度”指的只是神经网络中层的深度。 由三层以上组成的神经网络(包含输入和输出)可视为深度学习算法或深度神经网络。 只有两层或三层的神经网络只是基本神经网络。
语音识别:也称为自动语音识别 (ASR)、计算机语音识别或语音到文本,能够使用自然语言处理 (NLP),将人类语音处理为书面格式。 许多移动设备将语音识别结合到系统中以进行语音搜索,例如: Siri,或提供有关文本的更多辅助功能。
客户服务:在线聊天机器人正逐步取代客户互动中的人工客服。 他们回答各种主题的常见问题 (FAQ) ,例如送货,或为用户提供个性化建议,交叉销售产品,提供用户尺寸建议,改变了我们对网站和社交媒体中客户互动的看法。 示例包括具有虚拟客服的电子商务站点上的聊天机器人、消息传递应用(例如 Slack 和 Facebook Messenger)以及虚拟助理和语音助手通常执行的任务。
计算机视觉:该 AI 技术使计算机和系统能够从数字图像、视频和其他可视输入中获取有意义的信息,并基于这些输入采取行动。 这种提供建议的能力将其与图像识别任务区分开来。 计算机视觉由卷积神经网络提供支持,应用在社交媒体的照片标记、医疗保健中的放射成像以及汽车工业中的自动驾驶汽车等领域。
推荐引擎:AI 算法使用过去的消费行为数据,帮助发现可用于制定更有效的交叉销售策略的数据趋势。 这用于在在线零售商的结帐流程中向客户提供相关的附加建议。
自动股票交易:旨在用于优化股票投资组合,AI 驱动的高频交易平台每天可产生成千上万个甚至数以百万计的交易,无需人工干预。
sklearn是scikit-learn的简称,是一个基于Python的第三方模块。sklearn对常用的机器学习算法进行了封装,其中包括:
分类(Classification)
回归(regression)
聚类(clustering)
数据降维(dimensionality reduction)
常用模型(modelselection)
数据预处理(preprocessing)
在进行机器学习任务时,并不需要实现算法,只需要简单的调用sklearn库中提供的模块就能完成大多数的机器学习任务。
sklearn库是在Numpy,Scipy和matplotlib的基础上开发而成的,因此在介绍sklearn的安装前,需要先安装这些依赖库。
NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。在Python中虽然提供了list容器和array模块,但这些结构并不适合于进行数值计算,因此需要借助于NumPy库创建常用的数据结构(如多维数组,矩阵等)以及进行常用的科学计算(如矩阵计算)。
SciPy库是sklearn库的基础,它是基于Numpy的一个集成了多种数学算法和函数的Python模块。它的不同子模块有不同的应用,如积分、插值、优化和信号处理等。
Matplotlib是基于Numpy的一套Python工具包,它提供了大量的数据绘图工具,主要用于绘制一些统计图形,将大量的数据转换成更加容易呗接受的图表。(注意:要先安装Numpy再安装matplotlib库)
Scikit-learn 要求:
Python (>= 3.5),
NumPy (>= 1.11.0),
SciPy (>= 0.17.0),
joblib (>= 0.11).
sklearn安装包的下载:安装 scikit-learn — scikit-learn 1.2.1 文档
sklearn安装顺序如下:
Numpy库
SciPy库
matplotlib库
sklearn库
关于依赖库Numpy的安装,首先找对应自己的python版本和Windows位数的文件
例如:Python3.7版本,win64位则执行下面命令:
pip install Numpy-1.15.4+mkl-cp37-amd37m-win_amd64.ahl
关于依赖库scipy的安装,用命令:
pip install scipy-1.2.1-cp37-cp37m-win_amd64.ahl
关于依赖库matplotlib的安装,用命令:
pip install matplotlib-2.2.4-cp37-cp37m-win_amd64.ahl
关于依赖库sklearn的安装,用命令:
pip install scikit_learn-0.18.1-cp35-cp35m-win_amd64.ahl
如果你已经有一个合适的 numpy 和 scipy版本,安装 scikit-learn 最简单的方法是使用 pip。
pip install -U scikit-learn
或者 conda:
conda install scikit-learn
例子(使用conda安装):
首先打开anaconda Prompt的控制台输入conda。
按上面的输入 conda install sklearn
下载好后就是这样
sklearn是一个机器学习的python库,里面包含很多经典算法,可以很方便地选择对应的算法对数据进行训练,很方便的得出各种训练的参数,并使用模型对分类进行预测。
机器学习算法往往需要大量的数据,在sklearn中获取数据通常采用两种方式,以中国是使用自带的数据集,另一种是创建数据集。
sklearn自带了很多数据集,可以用来对算法进行测试分析,免去了自己再去找数据集的烦恼,其中包括鸢尾花数据集:load_iris();手写数字数据集:load_digitals();糖尿病数据集:load_diabetes();乳腺癌数据集:load_breast_cancer();波士顿数据集:load_boston();体能数据集:load_linnerud()。
以波士顿数据集为例导入数据集:
该数据集包含美国人口普查局收集的美国马萨诸塞州波士顿住房价格的有关信息, 数据集很小,只有506个案例。
数据集都有以下14个属性:
CRIM--城镇人均犯罪率 ------【城镇人均犯罪率】
ZN - 占地面积超过25,000平方英尺的住宅用地比例。 ------【住宅用地所占比例】
INDUS - 每个城镇非零售业务的比例。 ------【城镇中非商业用地占比例】
CHAS - Charles River虚拟变量(如果是河道,则为1;否则为0 ------【查尔斯河虚拟变量,用于回归分析】
NOX - 一氧化氮浓度(每千万份) ------【环保指标】
RM - 每间住宅的平均房间数 ------【每栋住宅房间数】
AGE - 1940年以前建造的自住单位比例 ------【1940年以前建造的自住单位比例 】
DIS -波士顿的五个就业中心加权距离 ------【与波士顿的五个就业中心加权距离】
RAD - 径向高速公路的可达性指数 ------【距离高速公路的便利指数】
TAX - 每10,000美元的全额物业税率 ------【每一万美元的不动产税率】
PTRATIO - 城镇的学生与教师比例 ------【城镇中教师学生比例】
B - 1000(Bk - 0.63)^ 2其中Bk是城镇黑人的比例 ------【城镇中黑人比例】
LSTAT - 人口状况下降% ------【房东属于低等收入阶层比例】
MEDV - 自有住房的中位数报价, 单位1000美元 ------【自住房屋房价中位数】
导入数据:
#导入sklearn的数据库
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn. metrics import mean_squared_error
import pandas as pd
import numpy as np
使用sklearn的样本生成器(samples generator)可以创建数据
def linear_model1():
"""
线性回归:正规方程
"""
#1.获取数据
data = load_boston()
#2.数据集划分
x_train,x_test,y_train,y_test=train_test_split(data.data,data.target,random_state=22)
#3.特征工程-标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
#4.机器学习-线性回归(正规方程)
estimator = LinearRegression()
estimator.fit(x_train,y_train)
#5.模型评估
#5.1 获取系数等值
y_predict = estimator.predict(x_test)
print("预测值为:\n",y_predict)
print("模型中的系数为:\n",estimator.coef_)
print("模型中的偏置为:\n",estimator.intercpt_)
#5.2评价
#均方误差
error = mean_squared_error(y_test,ypredict)
print("误差为:\n",error)
return None
linear_model1()
输出结果:
我们为什么要进行数据预处理?通常,真实生活中,我们获得的数据中往往存在很多的无用信息,甚至存在错误信息,而机器学习中有一句话叫做“Garbage in,Garbage out”,数据的健康程度对于算法结果的影响极大。数据预处理就是让那些冗余混乱的源数据变得能满足其应用要求。在这里只谈及几个基础的数据预处理的方法。sklearn提供了一个数据预处理的package:preprocessing,直接导入即可。
import sklearn.preprocessing as sk_preprocessing
下面将[[1,-1,2],[0,2,-1],[0,1,-2]]作为初始数据。
基于mean和std的标准化:
scaler = sk_preprocessing.StandardScaler().fit(X)
new_X = scaler.transform(X)
print("基于mean和std的标准化:",new_X)
输出结果:
规范化到一定区间内feature_range为数据规范化的范围.
scaler = sk_preprocessing.MinMaxScaler(feature_range = (0,1)).fit(X)
new_X = scaler.transform(X)
print("规范化到一定区间内",new_X)
输出结果:
然后我们把数据正则化
首先求出样本的p-范数,然后该样本的所有元素都要除以该范数,这样最终使得每个样本的范数都为1.
当我们正在使用sklearn中的normalize()函数。如果您一直使用12作为范数值范数
normed_X =normalize(X, axis=0, norm='12')
根据文档,参数范数的支持规范是'l1‘、’l2‘或'max’
所以要将12参数值替换为l2,如下所示:
normed_X =normalize(X, axis=0, norm='l2')
这是很多人都会犯的错误。
new_X = sk_preprocessing.normalize(X,norm = "l2")
print("求二范数",new_X)
打印结果:
回归模型(regression model)对统计关系进行定量描述的一种数学模型,是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。例如司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归。他可以根据历史数据的变化规律,寻找自变量与因变量之间的回归方程式,确定模型参数,据此预测。
特点:技术比较成熟,预测过程简单;将预测对象的影响因素分解,考察各因素的变化情况,从而估计预测对象未来的数量状态;回归模型误差较大,外推特性差。
适用范围:回归分析法一般适用于中期预测。回归分析法要求样本量大且要求样本有较好的分布规律,当预测的长度大于占有的原始数据长度时,采用该方法进行预测在理论上不能保证预测结果的精度。另外,可能出现量化结果与定性分析结果不符的现象,有时难以找到合适的回归方程类型。
我们常见的回归分析中,线性回归和 logistic回归最为常见。也是当前研究最多,并且使用最为晋遍,以及最为人接受容易理解的研究方法。
尤其是线性回归,其使用最为成熟,研究最多,而且绝大多数生活现象均可使用线性回归进行研究,因而结合回归分析还会多出一些回归方法;同时回归分析模型会有很多假定,或者满足条件,如果不满足这些假定或者条件就会导致模型使用出错,此时就有对应的其他回归模型出来解决这些问题,因而跟着线性回归后面又出来很多的回归。
pip install -i https://pypi.tuna.tsinghus.edu.cn/simple/ sklearn
import sklearn
print('hi')
from sklearn.linear_model import LinearRegression
x =[[80,86],
[82,80],
[85,78],
[90,90],
[86,82],
[82,90],
[78,80],
[92,94]]
y=[84.2,80.6,80.1,90,83.2,87.6,79.4,93.4]
x
y
estimator=LinearRegression()
estimator.fit(x,y)
estimator.coef_
estimator.predict([[100,80]])