机器学习之监督标题学习__线性分类

机器学习之监督标题学习__线性分类
一,logistic回归 (逻辑回归):
通过不断修正缩小误差最终得到准确的模型,整个过程中需要不断回归,直到达到指定的次数或者达到设定的精度
二,sigsigmoid函数:

激活函数sigmoid函数是一种阶跃函数,输出范围在[0,1],在回归问题中,我们需要找到最佳的回归系数,需要用到最优化算法。

Sigmoid函数: f(x)=1/(1+exp^(-x)) (exp,高等数学里以自然常数e为底的指数函数)在这里插入图片描述通过此函数将任何数字投射为0到1之间的数,有利于进行判定

三,精度:alpha(模型允许的误差值,一般来说误差越小运算量越大),同时如果过分追求高精度,容易造成模型过度复杂,从而造成过拟合的情况(即在训练集中的预测非常精确,但是在测试集中的准确率非常低)

四,步长(也称学习率)
即每次修正的大小,如果步长变大,则每次向正确参数移动的距离变大,学习效率变高,但是容易造成参数越过正确值

五,梯度
梯度上升和梯度下降:梯度是三维以上的空间用的,类似于二维中的倾斜度,二维中的倾斜度为正的时候线向右倾斜,否则向左倾斜,同理在三维中梯度下降类似于碗装,想要求得碗底那一点就要减,梯度上升类似于蘑菇状,想要求得最大值,就要增加

六,代码实现`

'''python
    # -*- coding: utf-8 -*-
"""
Created on Fri Jan  4 20:41:37 2019

@author: ym
"""
from numpy import *

#定义sigmoid的实现
def sigmoid(data):
    return 1.0/(1+exp(-data))
#print(sigmoid(40))
#当学习指定次数后退出循环
def gradient_ascent_test1():
    def func(old):
        return -2*old+4
    old=-1
    news=0
    alpha=0.001    
    num=5000
    for i in range(num):
        olds=news
        news=olds+alpha*func(olds)
    return news
print(gradient_ascent_test1())
#当模型到达指定精度后停止学习
def gradient_ascent_test2():
    def func(old):
        return -2*old+4
    olds=-1
    news=0
    alpha=0.001   #步长 
    pricision=0.00001   #精度
    while (news-olds)>pricision:
        olds=news
        news=olds+alpha*func(olds)
    return news
print(gradient_ascent_test2())

#数据集前80条作为训练集  后20条作为测试集
#加载数据
def loadDataSet():
    i=0
    dataMat=[]
    labelMat=[]
    with open('testSet.txt','r') as fp:
        for line in fp.readlines():
            if i>80:
                break
            array=line.strip().split()
            dataMat.append([1.0,float(array[0]),float(array[1])])
            labelMat.append(int(array[2]))
            i=i+1
    return dataMat,labelMat
dataMat,labelMat=loadDataSet()
#print(dataMat)
#print(labelMat)
#学习部分  获得模型
def gradientAscent(dataMat,labelMat):
    #将python中的list转为  Matrix
    dataMat=mat(dataMat)
    labelMat=mat(labelMat).T  # transpose()转置  ——》》行转置为行  行转置为列
    m,n=shape(dataMat)     #数据集有n行  3列
    #numpy  创建一个值为1  n行1列的值   
    weights=ones((n,1))
    alpha=0.0001        #步长  学习率
    num=5000            #迭代的次数
    for k in range(num):
        tempResult=sigmoid(dataMat*weights)
        error=labelMat-tempResult
        weights=weights+alpha*dataMat.T*error
    return weights

weights=gradientAscent(dataMat,labelMat)
print(weights)

#测试模型
data=[1.0, 0.317029	,14.739025]
data=mat(data)
y=data*weights
cla=sigmoid(y)
print(y,' ',cla)
'''        

`

猜你喜欢

转载自blog.csdn.net/TING9423/article/details/85841621