电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python 實現(xiàn)邏輯回歸

瀏覽:7日期:2022-06-30 18:15:37
邏輯回歸

適用類型:解決二分類問題

邏輯回歸的出現(xiàn):線性回歸可以預(yù)測連續(xù)值,但是不能解決分類問題,我們需要根據(jù)預(yù)測的結(jié)果判定其屬于正類還是負類。所以邏輯回歸就是將線性回歸的結(jié)果,通過Sigmoid函數(shù)映射到(0,1)之間

線性回歸的決策函數(shù):數(shù)據(jù)與θ的乘法,數(shù)據(jù)的矩陣格式(樣本數(shù)×列數(shù)),θ的矩陣格式(列數(shù)×1)

python 實現(xiàn)邏輯回歸

將其通過Sigmoid函數(shù),獲得邏輯回歸的決策函數(shù)

python 實現(xiàn)邏輯回歸

使用Sigmoid函數(shù)的原因:

可以對(-∞, +∞)的結(jié)果,映射到(0, 1)之間作為概率

可以將1/2作為決策邊界

python 實現(xiàn)邏輯回歸

數(shù)學(xué)特性好,求導(dǎo)容易

python 實現(xiàn)邏輯回歸

邏輯回歸的損失函數(shù)

線性回歸的損失函數(shù)維平方損失函數(shù),如果將其用于邏輯回歸的損失函數(shù),則其數(shù)學(xué)特性不好,有很多局部極小值,難以用梯度下降法求解最優(yōu)

這里使用對數(shù)損失函數(shù)

python 實現(xiàn)邏輯回歸

解釋:如果一個樣本為正樣本,那么我們希望將其預(yù)測為正樣本的概率p越大越好,也就是決策函數(shù)的值越大越好,則logp越大越好,邏輯回歸的決策函數(shù)值就是樣本為正的概率;如果一個樣本為負樣本,那么我們希望將其預(yù)測為負樣本的概率越大越好,也就是(1-p)越大越好,即log(1-p)越大越好

為什么使用對數(shù)函數(shù):樣本集中有很多樣本,要求其概率連乘,概率為0-1之間的數(shù),連乘越來越小,利用log變換將其變?yōu)檫B加,不會溢出,不會超出計算精度

損失函數(shù):: y(1->m)表示Sigmoid值(樣本數(shù)×1),hθx(1->m)表示決策函數(shù)值(樣本數(shù)×1),所以中括號的值(1×1)

python 實現(xiàn)邏輯回歸

二分類邏輯回歸直線編碼實現(xiàn)

import numpy as npfrom matplotlib import pyplot as plt​from scipy.optimize import minimizefrom sklearn.preprocessing import PolynomialFeatures​​class MyLogisticRegression: def __init__(self): plt.rcParams['font.sans-serif'] = ['SimHei'] # 包含數(shù)據(jù)和標簽的數(shù)據(jù)集 self.data = np.loadtxt('./data2.txt', delimiter=',') self.data_mat = self.data[:, 0:2] self.label_mat = self.data[:, 2] self.thetas = np.zeros((self.data_mat.shape[1]))​ # 生成多項式特征,最高6次項 self.poly = PolynomialFeatures(6) self.p_data_mat = self.poly.fit_transform(self.data_mat)​ def cost_func_reg(self, theta, reg): ''' 損失函數(shù)具體實現(xiàn) :param theta: 邏輯回歸系數(shù) :param data_mat: 帶有截距項的數(shù)據(jù)集 :param label_mat: 標簽數(shù)據(jù)集 :param reg: :return: ''' m = self.label_mat.size label_mat = self.label_mat.reshape(-1, 1) h = self.sigmoid(self.p_data_mat.dot(theta))​ J = -1 * (1/m)*(np.log(h).T.dot(label_mat) + np.log(1-h).T.dot(1-label_mat)) + (reg / (2*m)) * np.sum(np.square(theta[1:])) if np.isnan(J[0]): return np.inf return J[0]​ def gradient_reg(self, theta, reg): m = self.label_mat.size h = self.sigmoid(self.p_data_mat.dot(theta.reshape(-1, 1))) label_mat = self.label_mat.reshape(-1, 1)​ grad = (1 / m)*self.p_data_mat.T.dot(h-label_mat) + (reg/m)*np.r_[[[0]], theta[1:].reshape(-1, 1)] return grad​ def gradient_descent_reg(self, alpha=0.01, reg=0, iterations=200): ''' 邏輯回歸梯度下降收斂函數(shù) :param alpha: 學(xué)習(xí)率 :param reg: :param iterations: 最大迭代次數(shù) :return: 邏輯回歸系數(shù)組 ''' m, n = self.p_data_mat.shape theta = np.zeros((n, 1)) theta_set = []​ for i in range(iterations): grad = self.gradient_reg(theta, reg) theta = theta - alpha*grad.reshape(-1, 1) theta_set.append(theta) return theta, theta_set​ def plot_data_reg(self, x_label=None, y_label=None, neg_text='negative', pos_text='positive', thetas=None): neg = self.label_mat == 0 pos = self.label_mat == 1 fig1 = plt.figure(figsize=(12, 8)) ax1 = fig1.add_subplot(111) ax1.scatter(self.p_data_mat[neg][:, 1], self.p_data_mat[neg][:, 2], marker='o', s=100, label=neg_text) ax1.scatter(self.p_data_mat[pos][:, 1], self.p_data_mat[pos][:, 2], marker='+', s=100, label=pos_text) ax1.set_xlabel(x_label, fontsize=14)​ # 描繪邏輯回歸直線(曲線) if isinstance(thetas, type(np.array([]))): x1_min, x1_max = self.p_data_mat[:, 1].min(), self.p_data_mat[:, 1].max() x2_min, x2_max = self.p_data_mat[:, 2].min(), self.p_data_mat[:, 2].max() xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max)) h = self.sigmoid(self.poly.fit_transform(np.c_[xx1.ravel(), xx2.ravel()]).dot(thetas)) h = h.reshape(xx1.shape) ax1.contour(xx1, xx2, h, [0.5], linewidths=3) ax1.legend(fontsize=14) plt.show()​ @staticmethod def sigmoid(z): return 1.0 / (1 + np.exp(-z))​​if __name__ == ’__main__’: my_logistic_regression = MyLogisticRegression() # my_logistic_regression.plot_data(x_label='線性不可分數(shù)據(jù)集')​ thetas, theta_set = my_logistic_regression.gradient_descent_reg(alpha=0.5, reg=0, iterations=500) my_logistic_regression.plot_data_reg(thetas=thetas, x_label='$lambda$ = {}'.format(0))​ thetas = np.zeros((my_logistic_regression.p_data_mat.shape[1], 1)) # 未知錯誤,有大佬解決可留言 result = minimize(my_logistic_regression.cost_func_reg, thetas, args=(0, ), method=None, jac=my_logistic_regression.gradient_reg) my_logistic_regression.plot_data_reg(thetas=result.x, x_label='$lambda$ = {}'.format(0))二分類問題邏輯回歸曲線編碼實現(xiàn)

import numpy as npfrom matplotlib import pyplot as plt​from scipy.optimize import minimizefrom sklearn.preprocessing import PolynomialFeatures​​class MyLogisticRegression: def __init__(self): plt.rcParams['font.sans-serif'] = ['SimHei'] # 包含數(shù)據(jù)和標簽的數(shù)據(jù)集 self.data = np.loadtxt('./data2.txt', delimiter=',') self.data_mat = self.data[:, 0:2] self.label_mat = self.data[:, 2] self.thetas = np.zeros((self.data_mat.shape[1]))​ # 生成多項式特征,最高6次項 self.poly = PolynomialFeatures(6) self.p_data_mat = self.poly.fit_transform(self.data_mat)​ def cost_func_reg(self, theta, reg): ''' 損失函數(shù)具體實現(xiàn) :param theta: 邏輯回歸系數(shù) :param data_mat: 帶有截距項的數(shù)據(jù)集 :param label_mat: 標簽數(shù)據(jù)集 :param reg: :return: ''' m = self.label_mat.size label_mat = self.label_mat.reshape(-1, 1) h = self.sigmoid(self.p_data_mat.dot(theta))​ J = -1 * (1/m)*(np.log(h).T.dot(label_mat) + np.log(1-h).T.dot(1-label_mat)) + (reg / (2*m)) * np.sum(np.square(theta[1:])) if np.isnan(J[0]): return np.inf return J[0]​ def gradient_reg(self, theta, reg): m = self.label_mat.size h = self.sigmoid(self.p_data_mat.dot(theta.reshape(-1, 1))) label_mat = self.label_mat.reshape(-1, 1)​ grad = (1 / m)*self.p_data_mat.T.dot(h-label_mat) + (reg/m)*np.r_[[[0]], theta[1:].reshape(-1, 1)] return grad​ def gradient_descent_reg(self, alpha=0.01, reg=0, iterations=200): ''' 邏輯回歸梯度下降收斂函數(shù) :param alpha: 學(xué)習(xí)率 :param reg: :param iterations: 最大迭代次數(shù) :return: 邏輯回歸系數(shù)組 ''' m, n = self.p_data_mat.shape theta = np.zeros((n, 1)) theta_set = []​ for i in range(iterations): grad = self.gradient_reg(theta, reg) theta = theta - alpha*grad.reshape(-1, 1) theta_set.append(theta) return theta, theta_set​ def plot_data_reg(self, x_label=None, y_label=None, neg_text='negative', pos_text='positive', thetas=None): neg = self.label_mat == 0 pos = self.label_mat == 1 fig1 = plt.figure(figsize=(12, 8)) ax1 = fig1.add_subplot(111) ax1.scatter(self.p_data_mat[neg][:, 1], self.p_data_mat[neg][:, 2], marker='o', s=100, label=neg_text) ax1.scatter(self.p_data_mat[pos][:, 1], self.p_data_mat[pos][:, 2], marker='+', s=100, label=pos_text) ax1.set_xlabel(x_label, fontsize=14)​ # 描繪邏輯回歸直線(曲線) if isinstance(thetas, type(np.array([]))): x1_min, x1_max = self.p_data_mat[:, 1].min(), self.p_data_mat[:, 1].max() x2_min, x2_max = self.p_data_mat[:, 2].min(), self.p_data_mat[:, 2].max() xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max)) h = self.sigmoid(self.poly.fit_transform(np.c_[xx1.ravel(), xx2.ravel()]).dot(thetas)) h = h.reshape(xx1.shape) ax1.contour(xx1, xx2, h, [0.5], linewidths=3) ax1.legend(fontsize=14) plt.show()​ @staticmethod def sigmoid(z): return 1.0 / (1 + np.exp(-z))​​if __name__ == ’__main__’: my_logistic_regression = MyLogisticRegression() # my_logistic_regression.plot_data(x_label='線性不可分數(shù)據(jù)集')​ thetas, theta_set = my_logistic_regression.gradient_descent_reg(alpha=0.5, reg=0, iterations=500) my_logistic_regression.plot_data_reg(thetas=thetas, x_label='$lambda$ = {}'.format(0))​ thetas = np.zeros((my_logistic_regression.p_data_mat.shape[1], 1)) # 未知錯誤,有大佬解決可留言 result = minimize(my_logistic_regression.cost_func_reg, thetas, args=(0, ), method=None, jac=my_logistic_regression.gradient_reg) my_logistic_regression.plot_data_reg(thetas=result.x, x_label='$lambda$ = {}'.format(0))

以上就是python 實現(xiàn)邏輯回歸的詳細內(nèi)容,更多關(guān)于python 實現(xiàn)邏輯回歸的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 识禅_对禅的了解,从这里开始| 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 细石混凝土泵_厂家_价格-烟台九达机械有限公司 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 定坤静电科技静电消除器厂家-除静电设备| 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 熔体泵_熔体出料泵_高温熔体泵-郑州海科熔体泵有限公司 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 铁艺,仿竹,竹节,护栏,围栏,篱笆,栅栏,栏杆,护栏网,网围栏,厂家 - 河北稳重金属丝网制品有限公司 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | 澳洁干洗店加盟-洗衣店干洗连锁「澳洁干洗免费一对一贴心服务」 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 雪花制冰机(实验室雪花制冰机)百科 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 |