南宁网站建设优势,专门做酒店的招聘网站,wordpress dux主题首页,容桂网站智能推广新闻前言#xff1a;在利用机器学习方法进行数据分析时经常要了解变量的相关性#xff0c;有时还需要对变量进行回归分析。本文首先对人工智能/机器学习/深度学习、相关分析/因果分析/回归分析等易混淆的概念进行区分#xff0c;最后结合案例介绍如何利用Python进行简单线性回归…前言在利用机器学习方法进行数据分析时经常要了解变量的相关性有时还需要对变量进行回归分析。本文首先对人工智能/机器学习/深度学习、相关分析/因果分析/回归分析等易混淆的概念进行区分最后结合案例介绍如何利用Python进行简单线性回归分析。
一、机器学习
1.1什么是机器学习
谈到机器学习人们会很容易联想到人工智能和深度学习我们通过这三个概念的对比来说明三者的区别和联系。
人工智能Artificial Inteligence这个概念早在1956年就被提出当时科学家梦想着用当时刚刚出现的计算机来构造复杂的、拥有像人类智慧特性的机器。目前AI的分支很多诸如专家系统、机器学习、自然语言处理以及推荐系统等。
机器学习Mechine Learning机器学习是实现人工智能的一种方法是使用算法解析数据、并从中学习然后对真实世界中事件作出决策或预测。机器学习是通过大量数据来“训练”算法模型利用算法从数据中学习如何完成任务。学习方法可以分为监督学习如分类、无监督学习如聚类等。下面介绍一些基础概念学习(learning)是指找到特征(feature)和标签(label)的映射(mapping)关系。
有监督学习(supervised learning)不仅将训练数据特征丢给计算机还把分类的结果数据具有的标签也一并丢给计算机分析如分类和回归
无监督学习(unsupervised learning)只提供训练数据特征不给结果标签计算机只能利用其计算能力分析数据的特征然后得到一些数据集合集合内的数据在某些特征上相同或相似如聚类分析
半监督学习(semi-supervised learning)给计算机大量训练数据与少量分类结果具有同一标签的集合。
聚类(clustering)无监督学习的结果聚类的结果将产生若干组集合同集合中对象彼此相似与其他集合中对象相异。
分类(classification)与回归(regression)有监督学习的两大应用其区别在于分别产生离散或连续的结果分类及回归方法的区别在下文中有较详细分析。起名困难症用户机器学习之利用Python进行逻辑回归分析zhuanlan.zhihu.com
深度学习Deep Learning深度学习是机器学习的一种方法其本身会用到有监督和无监督的学习方法来训练深度神经网络。人工智能、机器学习、深度学习三者的关系
1.2机器学习的步骤
利用机器学习方法分析、解决问题的过程可分为五个步骤机器学习主要步骤
1.提出问题
明确要分析的问题为后续的机器学习过程提供目标。
2.理解数据采集并查看数据
采集数据根据研究问题采集数据导入数据从不同数据源读取数据查看数据信息描述统计信息、数据缺失值、异常值情况等可以结合具体图表来直观查看数据。
3.数据清洗数据预处理
数据预处理是数据分析过程中关键的一环数据质量决定了机器学习分析的上限而具体采用的算法和模型只是逼近这个上限。包括缺失数据处理、异常值处理、数据类型转换、列名重命名、数据排序、选择子集、特征工程等步骤
4.构建模型
根据研究的问题以及数据的特点选择合适的算法将训练数据放入所选择的机器学习算法中构建相应的模型有时需要对多种算法模型进行比较甚至进行模型整合。
5.模型评估
利用测试数据对得到的模型效果进行评估具体评估指标依据研究的问题及采用的模型进行选择常用到的指标需根据模型的类型而定如分类模型常用准确率、ROC-AUC等而回归模型可以用决定系数等。各类学习器评价指标 - MsSpark的博客 - CSDN博客blog.csdn.net
1.3特征(feature)和标签(label)
机器学习中经常遇到特征及标签两个概念
特征数据的特征描述数据的属性。
标签数据的标签对数据的预测结果。
1.4Python机器学习包sklearn
Python提供了强大的sklearn包可以调用不同机器学习方法解决问题。我们并不需要一开始就掌握sklearn中每种机器学习方法只需在用到某个机器学习方法时再去sklearn中找对应算法的用法即可。本文第三部分会以调用sklearn包中LinearRegression方法进行简单线性回归分析为例说明如何使用Python进行数据分析。sklearn algorithm cheat-sheet
二、相关分析及回归分析
机器学习常用来解决相关分析和回归分析的问题本文接下来主要介绍两者的相关概念及评估指标以及它们的区别与联系。
2.1相关分析及回归分析相关分析(Correlation analysis)研究两个或两个以上处于同等地位的随机变量间的相关关系的统计分析方法。
回归分析(Regression analysis)确定两种或两种以上变量间相互依赖定量关系的统计分析方法将变量分为因变量和自变量。
两者的区别相关分析中涉及的变量不区分自变量和因变量变量之间关系是对等的回归分析中需要根据研究对象的性质和研究分析的目的区分变量为自变量和因变量。
相关分析主要通过“相关系数”反映变量间相关程度的大小因为变量间关系是对等的所有相关系数是唯一的回归分析中自变量和因变量之间可能存在多个回归方程。
两者的联系相关分析是回归分析的基础和前提回归分析是相关分析的深入和继续。
相关分析表现变量间数量变化的相关程度回归分析表现变量间数量相关的具体形式。
只有变量间存在高度相关时进行回归分析需求具体形式才有意义。
2.2线性相关性类型及回归分析类型
2.2.1线性相关性类型
以两个变量的简单线性相关为例
散点图直观判断变量间是否有相关性的最佳方法结合散点图来直观显示各个变量之间的相关性。
三种线性相关性正线性相关总体表现直线朝上负线性相关非线性相关。
2.2.2回归分析类型
根据不同的维度对回归分析进行分类一元回归和多元multivariate回归分析因变量多少
简单回归和多重multiple回归分析自变量多少
线性回归和非线性回归自变量及因变量间关系类型。
2.3衡量指标
2.3.1衡量变量间相关度的指标
符号反映两个变量的相关性方向大小表示两个变量相关性程度指标一协方差
协方差(cov(data,bias1))描述变量间相互关系两随机向量X,Y之间的协方差定义为cov(X,Y)E[(X-E(X))(Y-E(Y))]E表示数学期望。可通俗的理解为两个变量在变化过程中是同方向变化还是反方向变化以及同向或反向程度如何
符号表示相关性方向大小表示相关性程度。
该指标缺点容易受到变量量纲影响。指标二相关系数
相关系数(corrcoef(data))先对变量做标准化变换除相应标准差然后再计算协方差把先标准化变换后做协方差运算定义为变量间的相关系数皮尔逊相关系数。可以理解为是剔除两个变量量纲影响标准化后的特殊协方差。
相关系数与协方差对比相关系数是一个无单位的量绝对值不超过1它描述了变量间的线性相关程度。
当变量间相关系数为0时变量间不存在线性趋势关系但可能存在非线性趋势关系。
当变量间相关系数的绝对值为1时一个变量是另一变量的线性函数当变量间相关系数越接近1时变量间线性趋势越明显。
在用协方差描述变量间的相关程度时会受到变量的量纲和数量级的影响即使对于同样的一组变量当变量的量纲和数量级发生变化时协方差也会随之改变。
2.3.2衡量回归模型精确度的指标
先介绍回归分析中的最佳拟合线回归方程
最佳拟合线即能最准确预测出所有点真实值的线。
如何求出回归方程中的截距和回归系数最小二乘法使误差平方和最小
指标三决定系数R平方coefficient of determination
决定系数(model.score())评估得到的回归方程是否较好拟合样本数据的统计量。以下是与决定系数相关的重要指标以及决定系数的计算过程
总的平方和观测值与平均值的离差平方和
误差平方和观测值与预估值的离差平方和
回归平方和预估值与平均值的离差平方和
三个平方和之间的关系
决定系数的计算回归平方和与总平方和的商
决定系数与相关系数对比决定系数表示回归线拟合程度即有多少百分比的y波动可以被回归线描述相关系数表示变量间的相关关系。
决定系数大小R平方越高回归模型越精确取值为[0,1]相关系数等于 (相关性方向符号or-)决定系数开方取值为[-1,1]。
决定系数越大则拟合优度越好但具体问题要具体分析相关系数绝对值越大说明变量相关性越强。
2.4相关关系与因果关系
注意不能混淆相关关系和因果关系相关分析只能表明变量是如何或以怎样的程度彼此联系在一起的。
三、回归分析的Python实现
利用Python中的sklearn包进行简单线性回归分析。
3.1提出问题
探究“学习时长”和“学习成绩”之间是否存在相关性关系如果有找出其回归方程。
3.2理解数据
1、导入数据包
import warnings
from collections import OrderedDict
import pandas as pd
import numpy as np
warnings.filterwarnings(ignore)
2、创建数据并查看数据
#创建数据并查看数据
examDict{学习时间:list(np.arange(0.5,5.5,0.25)),
学习成绩:[10, 22, 13, 43, 20, 22, 33, 50, 62,
48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]}
examOrderedDictOrderedDict(examDict)
examDfpd.DataFrame(examOrderedDict)
examDf.head()
#查看数据描述统计信息
examDf.describe()学习时间学习成绩
00.5010
10.7522
21.0013
31.2543
41.5020
学习时间学习成绩
count20.00000 20.000000
mean2.8750053.700000
std1.4790226.435821
min0.5000010.000000
25%1.6875030.250000
50%2.8750058.500000
75%4.0625075.250000
max5.2500093.000000
3、提取特征值和标签
#特征值解释变量自变量一般加X为后缀
#标签因变量一般加y为后缀
exam_XexamDf[学习时间]
exam_yexamDf[学习成绩]
4、利用散点图查看数据间关系
import matplotlib.pyplot as plt
#散点图
plt.scatter(exam_X,exam_y,colorb,label考试数据)
#横纵轴标签
plt.legend(loc2)
plt.xlabel(学习时间)
plt.ylabel(学习成绩)
plt.show()
5、求出变量间相关系数
#变量间的相关系数
rDfexamDf.corr()
print(rDf)学习时间学习成绩
学习时间1.00000.9379
学习成绩0.93791.0000
从散点图中我们可以看出学习时长和学习成绩之间应该存在线性相关关系且相关系数为0.9379呈现强线性相关关系模型选择时我们会创建线性回归模型进行拟合。
3.3构建模型
1、从数据集中分离出训练数据train和测试数据test
from sklearn.cross_validation import train_test_split
#建立训练集和测试集数据
train_X,test_X,train_y,test_y train_test_split(exam_X,exam_y,train_size0.8)
#输出训练集和测试集数据大小
print(训练集大小,train_X.shape,train_y.shape)
print(测试集大小,test_X.shape,test_y.shape)训练集大小 (16,) (16,)
测试集大小 (4,) (4,)
绘制散点图查看训练集和测试集数据的分布情况
import matplotlib.pyplot as plt
#散点图
plt.scatter(train_X,train_y,colorb,label训练集)
plt.scatter(test_X,test_y,colorr,label测试集)
#横纵轴标签
plt.legend(loc2)
plt.xlabel(学习时间)
plt.ylabel(学习成绩)
plt.show()
2、创建线性回归模型
#导入线性回归模型
from sklearn.linear_model import LinearRegression
#创建模型
modelLinearRegression()
3、训练模型
#导入模型的数据应为一列数据
train_Xtrain_X.values.reshape(-1,1)
train_ytrain_y.values.reshape(-1,1)
test_Xtest_X.values.reshape(-1,1)
test_ytest_y.values.reshape(-1,1)
print(训练集大小,train_X.shape,train_y.shape)
print(测试集大小,test_X.shape,test_y.shape)
model.fit(train_X,train_y)训练集大小 (16, 1) (16, 1)
测试集大小 (4, 1) (4, 1)
3.4模型评估
1、查看模型得分即决定系数大小
#查看模型得分
print(模型得分为,round(model.score(test_X,test_y),4))模型得分为 0.4662
2、求出并绘制模型拟合线模型的回归方程yabx
#模型拟合线模型的回归方程yabx
amodel.intercept_
bmodel.coef_
print(模型的回归方程是:y%f%fx%(a,b))模型的回归方程是:y4.19732616.893159 x
#绘制拟合曲线
plt.scatter(train_X,train_y,colorb,labeltrain data)
test_y_predmodel.predict(test_X)
plt.plot(test_X,test_y_pred,colorblack,labelbest line)
#测试集数据的散点图
plt.scatter(test_X,test_y,colorr,labeltest data)
#坐标轴
plt.xlabel(学习时间)
plt.ylabel(学习成绩)
plt.legend(loc2)
plt.show()
四、总结
机器学习方法有很多这些方法有些很容易混淆比如相关分析/回归分析/因果分析以及聚类分析/分类分析等在使用时要注意区分其异同点。