【python+机器学习(5)】

欢迎大家关注公众号【哈希大数据】
1、二元分类问题概述
机器学习可以实现的两大核心点是分类预测和回归预测。在之前的分享中我们介绍了连续数据的线性回归预测问题。但是在实际生活中,我们所面对的许多问题往往是非连续的分类问题,比如医生根据一些指标判断病人是否可以康复、企业根据用户行为分析用户是否会流失、警察根据嫌疑人的特征来判定其是否为罪犯等。这些只有“是、否”两种结果的问题均属于两元分类问题。

在机器学习中,存在许多预测分类的算法,包括逻辑回归、决策树、支持向量机、随机森林、神经网络、朴素贝叶斯分类等等。其中逻辑回归是基于线性回归发展而来的,因其预测较为准确、易于理解而广泛应用于实际场景中,比如在银行的相关业务中,有80%是通过逻辑回归进行预测的,因此本节我们将从理论到具体实现,来详细讲解逻辑回归的相关内容。而具体案例应用将稍后分享。
2、逻辑回归介绍

image

我们已知常规的线性回归问题是寻找多个特征x和目标变量之间的线性关系,具体计算模型为:

image

在这种情况下,所得到的目标变量是连续的一些值。在实际问题中,虽然我们拥有同样多的特征属性值x,但是其目标却只有(是、否)两种情况。显然上述的线性问题无法与目标拟合,因此我们希望,可以做个同等变换将使这些连续的值,与分类结果相关联。这种关联方式可以通过Sigmoid函数来实现:

image

即当x为0.5时其值为0,大于0.5时其值将不断增大到无限接近于1,反之将接近0。下图表示x在不同范围时的函数值。

image

因此我们在原本的线性回归模型中套用Sigmoid函数就可以构建出逻辑回归的具体模型P:这样便可以表示预测结果为其中一种情况的可能性为p。

image

该逻辑回归模型等价与logit(p),这样便可以实现将连续的值映射为表示分类的概率问题。

image

构建完模型后,在进行机器学习预测时,我们也需要设计模型参数的计算方式,通过定义损失函数来确定参数值进而实现准确的预测。具体损失函数的构建以及参数值的优化(可使用梯度下降、牛顿法、拟牛顿法、梯度上升)等的具体实现,涉及到大量的数学计算这里将不再进行详细推导,如果感兴趣的小伙伴欢迎留言讨论。下面我们将具体通过python来一步步完成逻辑回归预测。

2、python从零实现逻辑回归

python的Scikit-learn库中已有完整的逻辑回归算法,类似于之前讲解的线性回归模型,可以直接导入后直接使用。具体导入方式如下。

from sklearn.linear_modle import LogisticRegression

但是为了更好的理解逻辑回归的实现思路,本次我们将从零实现该算法。

首先生成Logistic的一个类方法,第一步是实现特征变量x和分类变量y的初始化。

class logistic(): 
def __init__(self, x, y):
 if type(x) == type(y) == list: 
self.x = np.array(x)
 self.y = np.array(y) 
elif type(x) == type(y) == np.ndarray: 
self.x = x
 self.y = y 
else: raise False

第二步:定义sigmoid函数,完成调用可返回计算后的结果值。

def sigmoid(num):
 if type(num) == int or type(num) == float: 
return 1.0 / (1 + exp(-1 * num))
 else: raise False

第三步:进行数据的训练。其中alpha为学习率,errors为迭代阈值(只有计算误差小于该值才会停止训练),punish为惩罚系数默认为0.0001,times表示最大迭代次数。

 def train_data(self, alpha, errors, punish=0.0001): 
self.punish = punish 
dimension = self.x.shape[1] 
self.theta = np.random.random(dimension)
 compute_error = 100000000 
times = 0 
while compute_error > errors: 
res = np.dot(self.x, self.theta) 
delta = self.sigmoid(res) - self.y
 self.theta = self.theta - alpha * np.dot(self.x.T, delta) - punish * self.theta # 带惩罚的梯度下降方法 
compute_error = np.sum(delta) 
times += 1

第四步:对新的数据进行结果预测,返回0或者1的预测结果(将实际问题数据化处理)

 def predict(self, x): 
 x = np.array(x) 
 if self.sigmoid(np.dot(x, self.theta)) > 0.5:  
 return 1  else:   return 0

至此逻辑回归的预测算法已经实现,为了检验我们实现的该算法的准确性,我们将通过随机生成一些分类变量来进行测试。

首先生成200条2分类数据:

x, y = make_blobs(n_samples=200, centers=2, n_features=2, random_state=0, center_box=(10, 20))

然后调用我们完成的逻辑回归算法:(分别指定惩罚系数为0.1和0.01)

 result = logistic(x, y) 
result.train_data(alpha=0.00001, errors=0.005, punish=0.01)

分类预测效果展示:

image
image

我们明显可以看出不同惩罚参数的逻辑分割线是不同的,因此这也充分表明需要根据数据的实际特征来设定惩罚的系数,进而是预测结果可以更加准确。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容