日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python 實現邏輯回歸

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

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

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

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

python 實現邏輯回歸

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

python 實現邏輯回歸

使用Sigmoid函數的原因:

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

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

python 實現邏輯回歸

數學特性好,求導容易

python 實現邏輯回歸

邏輯回歸的損失函數

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

這里使用對數損失函數

python 實現邏輯回歸

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

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

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

python 實現邏輯回歸

二分類邏輯回歸直線編碼實現

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'] # 包含數據和標簽的數據集 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): ''' 損失函數具體實現 :param theta: 邏輯回歸系數 :param data_mat: 帶有截距項的數據集 :param label_mat: 標簽數據集 :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): ''' 邏輯回歸梯度下降收斂函數 :param alpha: 學習率 :param reg: :param iterations: 最大迭代次數 :return: 邏輯回歸系數組 ''' 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='線性不可分數據集')​ 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))二分類問題邏輯回歸曲線編碼實現

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'] # 包含數據和標簽的數據集 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): ''' 損失函數具體實現 :param theta: 邏輯回歸系數 :param data_mat: 帶有截距項的數據集 :param label_mat: 標簽數據集 :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): ''' 邏輯回歸梯度下降收斂函數 :param alpha: 學習率 :param reg: :param iterations: 最大迭代次數 :return: 邏輯回歸系數組 ''' 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='線性不可分數據集')​ 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 實現邏輯回歸的詳細內容,更多關于python 實現邏輯回歸的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲永久字幕| 亚洲欧美久久| 日韩精品成人在线观看| 在线观看亚洲精品福利片| 三级一区在线视频先锋| 亚洲欧美日韩精品一区二区 | 超级白嫩亚洲国产第一| 日韩a一区二区| 美女精品视频在线| 成人精品久久| 久久久男人天堂| 国产日韩欧美中文在线| 精品久久不卡| 老牛国内精品亚洲成av人片 | 久久婷婷亚洲| 午夜精品影院| 亚洲自啪免费| 最新国产精品| 国产欧美日韩在线一区二区| 麻豆91小视频| 久久精品导航| 欧美中文字幕| 91精品国产自产观看在线| 日韩精品亚洲专区在线观看| 欧美亚洲一区二区三区| 美女性感视频久久| 91亚洲人成网污www| 久久高清精品| 美国三级日本三级久久99 | 亚洲aa在线| 国产精品久久久久9999高清| а√在线中文在线新版| 91精品99| 日韩精品高清不卡| 欧美精品不卡| 日本少妇一区| 日韩精品一卡二卡三卡四卡无卡| 亚洲ww精品| 视频在线不卡免费观看| 精品日韩毛片| 热久久久久久| 国产美女高潮在线| 美女国产精品| 久久av日韩| 欧美日韩激情在线一区二区三区| 日韩综合小视频| 中文字幕人成乱码在线观看| 宅男噜噜噜66国产日韩在线观看| 亚洲精品免费观看| 日本一区二区免费高清| 黄页网站一区| 久久精品99国产精品日本| 神马午夜在线视频| 日韩精品高清不卡| 久久久五月天| 91大神在线观看线路一区| 欧美黄色网页| 91午夜精品| 午夜久久福利| 久久精品免费看| 久久夜色精品| 成人亚洲欧美| 色婷婷成人网| 人在线成免费视频| 午夜精品福利影院| 亚洲特级毛片| 久久亚洲资源中文字| 天使萌一区二区三区免费观看| 精品视频一区二区三区四区五区| 亚洲一卡久久| 四季av一区二区凹凸精品| 亚洲精品伊人| 欧美福利一区| 精品一区二区三区在线观看视频| 巨乳诱惑日韩免费av| 日韩在线高清| 中文字幕亚洲在线观看| 欧美亚洲在线日韩| 午夜在线视频一区二区区别| 国产一区二区精品福利地址| 四虎在线精品| 亚洲精品va| 国产传媒在线| 国产精品一区高清| 视频一区二区中文字幕| 日韩伦理一区| 国产精品99久久久久久董美香| 日韩中文字幕1| 欧美午夜精品一区二区三区电影| 久久中文字幕一区二区三区| 三级久久三级久久久| 国产偷自视频区视频一区二区| 日韩精品诱惑一区?区三区| 国产精品中文字幕制服诱惑| 免费欧美在线视频| 国产日韩综合| 欧美粗暴jizz性欧美20| 日韩精品首页| 蜜臀国产一区| 久久精品二区亚洲w码| 日本麻豆一区二区三区视频| 免费在线观看一区二区三区| 激情五月色综合国产精品| 日韩高清中文字幕一区二区| 精品国产成人| 久久99高清| 麻豆国产精品| 国产精品3区| 久久福利在线| 久久国产精品免费精品3p| 亚洲婷婷丁香| 综合在线一区| 日韩中文字幕| 日韩黄色在线观看| 日韩激情网站| 日本天堂一区| 日韩不卡一区二区| 日韩av二区在线播放| 天海翼亚洲一区二区三区| 亚洲精品亚洲人成在线观看| 亚洲三级在线| 日精品一区二区三区| 亚欧洲精品视频在线观看| 日韩一区中文| 亚洲精品韩国| 深夜福利亚洲| 久久国产精品色av免费看| 欧美另类中文字幕| 国产精品主播| 国语精品一区| 日韩欧美少妇| 欧美在线亚洲| 亚洲无线观看| 国产欧美一级| 国产在线一区不卡| 日本综合字幕| 欧美久久精品一级c片| 国产农村妇女精品一二区| 日韩中文字幕亚洲一区二区va在线 | 婷婷丁香综合| 中文欧美日韩| 日韩区一区二| 国产精品巨作av| 国产一区二区三区免费在线| 日韩中文视频| 日韩影院在线观看| 久久国际精品| 成人一区而且| 亚洲精品99| 欧美日韩一区自拍| 福利一区在线| 久久精品亚洲欧美日韩精品中文字幕| 国产免费av一区二区三区| 国产精品www.| 国产欧美二区| 日韩88av| 亚洲综合不卡| 国产色99精品9i| 国产一二在线播放| 好吊一区二区三区| 亚洲18在线| 精品久久免费| 日韩精品看片| 综合亚洲色图| 狠狠久久伊人中文字幕| 亚洲手机在线| 日韩和欧美的一区| 97精品一区二区| 国产精品腿扒开做爽爽爽挤奶网站| 日韩av一区二区在线影视| 国产中文在线播放| 亚洲欧美激情诱惑| 久久超碰99| 亚洲精品电影| 国产精品jk白丝蜜臀av小说| 亚洲婷婷在线| 欧美亚洲一区二区三区| 国内不卡的一区二区三区中文字幕| 欧美特黄一级大片| 国产欧美日韩免费观看| 欧美日韩精品一区二区视频| 日本不卡视频在线观看| 在线亚洲人成| 日韩国产精品久久久久久亚洲| 激情视频网站在线播放色| 亚洲精品护士| 久久精品免费一区二区三区| 日本 国产 欧美色综合| 国产96在线亚洲| 日韩高清在线不卡| 91精品国产福利在线观看麻豆| 亚洲午夜国产成人| 久久久国产精品网站| 香蕉久久国产| 国产v日韩v欧美v| 亚洲久久视频| 电影天堂国产精品| 国产日韩免费| 亚洲主播在线| 欧产日产国产精品视频|