回归算法和决策树

一、回归算法

1.回归分析的概念

回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。运用十分广泛,回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。如果在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且自变量之间存在线性相关,则称为多重线性回归分析。

2.回归分析的用途

回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。例如,司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归分析。

3.逻辑回归

我这里学习的是了逻辑回归,简单介绍一下什么是逻辑回归:逻辑回归,就是自变量只取两个值,要么True要么False,逻辑回归的公式大家去百度查吧,大体就是一件事情发生概率除以没有发生概率再取对数。注意一点如果自变量为字符型,就需要进行重新编码。这就是说自变量是销量情况,比如销量高(True),销量低(False),在进行数据处理前我们要把高、低这两个属性进行编码,改为1,0之类的数字量。

4.预测课程销量

逻辑回归还是要大家亲自去查一查,毕竟这个东西还是很抽象的,下面我们就网上很流行的是否录取取决于什么 进行预测,通过编写逻辑回归函数实现一下,并预测课程销量。
先看一下需要预测的数据:
这里写图片描述
我们发现admit代表着是否录取(1:录取 0:不录取) 它受三个因素限制 成绩(gre)绩点(gpa)学校影响力(rank)。我们要做的就是建立逻辑回归模型,当给出成绩、绩点、学校排名后预测是否可以录取。


#逻辑回归 预测分数、绩点、学校影响力对是否录取的影响,并给出三个分数判断是否录取
import pandas as pda  #导入pandas模块用来导入数据
from sklearn.linear_model  import LogisticRegression as LR  #导入逻辑回归模型
from sklearn.linear_model  import RandomizedLogisticRegression  as RLR  #导入随机逻辑回归模型

fname='C:/Users/dell/Desktop/python练习/data fenxi/logic/grade.csv'
data=pda.read_csv(fname) #数据读入到data

#是否录取是因变量,自变量是:分数、绩点、学校影响力
x=data.iloc[:,1:4].as_matrix()  # 取自变量  ,左边是行(:左右都为空的意思是取所有行),右边是列  .as_matrix() 转换为数组
y=data.iloc[:,0:1].as_matrix()  #取因变量
#建立随机逻辑回归模型
r1=RLR()
r1.fit(x,y)  #进行模型训练
r1.get_support(indices=True)  #得到有效特征 (少了rank) indices=True必须添加 默认是False会出错
#我们发现有效特征少了一个学校影响力,就说明学校影响力对是否录取决定性不大
print(data.columns[r1.get_support(indices=True)])   #查看有效特征

t=data[data.columns[r1.get_support(indices=True)]].as_matrix() #将筛选后的有效信息存入t中
#进行训练
A=LR()  #建立逻辑回归模型
A.fit(t,y)
print('训练结束')
print('正确率%s'%A.score(x,y))  #检测正确率

看一下结果:先看一下有效特征,是否少了rank
这里写图片描述
再看一下训练结果和正确率,这里正确率一定不高,因为我用的数据太少了。
这里写图片描述


二、决策树

1.决策树概念

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3, C4.5和C5.0生成树算法使用熵。这一度量是基于信息学理论中熵的概念。

2.决策树预测课程销量与什么有关

先看一下我们的数据:
这里写图片描述
我们发现销量的高低跟很多因素都有关系,我们可以把他们生成决策树,通过决策树来观察销量的高低和什么有关系。


#决策树  ID3算法  分析课程销量
import pandas as pda
#读取数据
path='C:/Users/dell/Desktop/python练习/data fenxi/logic/tree.csv'
data=pda.read_csv(path,encoding='gbk')
print(data)
#获取有用数据
#自变量:实战、课程数、是否促销、是否提供配额   因变量:销量
x=data.iloc[:,1:5].as_matrix()  #打印x是二维数组
y=data.iloc[:,5:6].as_matrix()  #打印y是一维数组
#将是、多、高这种词语转化为1,凡是否、少、低转换为-1
for i in range(0,len(x)):   #遍历x中的每一个元素
    for j in range(0,len(x[i])):
        thisdata=x[i][j]
        if (thisdata == '是'or thisdata == '多'or thisdata == '高'):
            x[i][j] = int(1)
        else:
            x[i][j] = int(-1)
print(x)
for item in range(0,len(y)):
    thisdata1 = y[item]
    if (thisdata1 == '高'):
        y[item] = int(1)
    else:
        y[item] = int(-1)
print(y)

#建立决策树
from sklearn.tree import DecisionTreeClassifier as DTC
dtc=DTC(criterion= 'entropy')  #按照信息熵来建立
#现在x,y为object格式,需要将x,y改为数字形式,将x,y转化为数据框,在转化为数组(并指定形式)
xf=pda.DataFrame(x)
yf=pda.DataFrame(y)  #转为数据框
x2=xf.as_matrix().astype(int)
y2=yf.as_matrix().astype(int)  #转化为数组指定形式
dtc.fit(x2,y2)  #训练决策树

#决策树可视化
from sklearn.tree import export_graphviz
from sklearn.externals.six  import StringIO

with open('C:/Users/dell/Desktop/python练习/data fenxi/logic/dtc.dot','w') as file: #用来存生成的dot格式的决策树
    export_graphviz(dtc,feature_names= ['shizhan','lessons','cuxiao','tigongpeihuo'],out_file= file)  #导出决策树 输出到file中 ,起的名字对应:实战、课程数、促销、提供配货

先看一下转化为数字1和-1的x,y,上面是x下面是y:
这里写图片描述
最后在设定文件夹中产生了决策树文件dtc.dot:
这里写图片描述
我们用软件Graphviz打开:
软件下载地址:http://baoku.360.cn/soft/show/appid/102177365
下载之后需要将软件的bin目录放入环境变量,之后启动cmd,进入dtc.dot文件夹,我这里是 cd C:\Users\dell\Desktop\python练习\data fenxi\logic 然后,利用命令将dot文件转化为图片格式png(当然你可以转为其他格式,比如pdf),命令:dot -Tpng dtc.dot -o lesson.png
转化完成后发现当前目录下多出一个png图片,打开就是可视化的决策树:
这里写图片描述

我们观察决策树时候左面的都是不好的,右边的都是好的,我们分析第一个判断框:就是是否实战,实战就往右,不实战就往左。entropy是信息熵因素,他越大说明实战对整个销量的影响越大。samples是数据总数,一共30条数据。value代表销量高低,左边是销量低的数据总数,右边是销量高的数据总数。下面的分析方法同上。

猜你喜欢

转载自blog.csdn.net/weixin_42898819/article/details/81910974