pyspark 写 logistic regression

import random as rd
import math

class LogisticRegressionPySpark:
    def __init__(self,MaxItr=100,eps=0.01,c=0.1):
        self.max_itr = MaxItr
        self.eps = eps
        self.c = c
    
    def train(self,data):
        #data为RDD,每条数据的最后一项为类别的标签 0 或者1
        k = len(data.take(1)[0])
        #初始化w
        self.w = [rd.uniform(0,1) for i in range(k)]#第一个是截距b
        n = data.count()
        
        for i in range(self.max_itr):
            wadd = data.map(self.gradientDescent).reduce(lambda a,b:[a[i]+b[i] for i in range(k)]).collect()
            for i in range(k):
                #b没有加入正规化项,所以这里加了一个(i>0)
                self.w[i] += (wadd[i]/n-self.c*self.w[i]*(i>0))*self.eps
        
        return self.w
            
    def gradientDescent(self,x):
        h = 1/(1+math.exp(-sum(x[i]*self.w[i+1] for i in range(len(x)-1)))-self.w[0])
        if x[len(x)-1]==0:
            h = 1-h
        return [h if i==0 else h*x[i-1] for i in range(len(x))]
    
    def predict(self,data):
        return data.map(lambda x:1/(1+math.exp(-sum(self.w[0] if i==0 else self.w[i]*x[i-1] for i in range(len(x)+1)))))    

 

转载于:https://www.cnblogs.com/porco/p/4619580.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值