当前位置: 首页 > news >正文

门户网站做公众号的好处开发小程序哪家好

门户网站做公众号的好处,开发小程序哪家好,wordpress怎么修改密码,新乡河南网站建设Logistic 回归 Logistic 回归算法Logistic 回归简述Sigmoid 函数Logistic 回归模型表达式求解参数 $\theta $梯度上升优化算法 Logistic 回归简单实现使用 sklearn 构建 Logistic 回归分类器Logistic 回归算法的优缺点 Logistic 回归算法 Logistic 回归简述 Logistic 回归是一… Logistic 回归 Logistic 回归算法Logistic 回归简述Sigmoid 函数Logistic 回归模型表达式求解参数 $\theta $梯度上升优化算法 Logistic 回归简单实现使用 sklearn 构建 Logistic 回归分类器Logistic 回归算法的优缺点 Logistic 回归算法 Logistic 回归简述 Logistic 回归是一种用于解决二分类问题的机器学习算法。虽然 Logistic Regression 中包含了 Regression 一词但实际上逻辑回归是一种用于分类的方法而不是回归。 Logistic 回归通过建立一个逻辑回归模型来预测离散的输出变量该输出变量可以是 0 或 1。具体来说该模型基于输入特征的线性组合通过拟合一个逻辑函数通常是 sigmoid 函数将线性组合映射到 [0, 1] 的概率范围内从而预测输入特征与离散输出变量之间的关系并将输出映射到 0 或 1 两个不同的类别。 假设现在有一些数据点我们利用一条直线对这些数据点进行拟合该直线称为最佳拟合直线这个拟合过程就称作为回归。如下图所示 利用逻辑回归模型进行分类的主要思想根据现有数据对分类边界建立回归公式以此进行分类。 Sigmoid 函数 想了解 Logistic 回归首先需要了解 sigmoid 函数其公式如下 f ( x ) 1 1 e − x f(x) \frac{1}{1 e^{-x}} f(x)1e−x1​ sigmoid 函数曲线如下图所示 Logistic 回归模型表达式 逻辑回归模型从本质上来说是一个基于条件概率的判别模型逻辑回归模型的数学表达式如下 p ( y 1 ∣ x ) 1 1 e ( − z ) p ( y 0 ∣ x ) 1 − p ( y 1 ∣ x ) p(y1|x) \frac{1}{1 e^{(-z)}} \\ p(y0|x) 1 - p(y1|x) p(y1∣x)1e(−z)1​p(y0∣x)1−p(y1∣x) 其中 p ( y 1 ∣ x ) p(y1|x) p(y1∣x) 表示给定输入 x x x 时输出变量 y 1 y1 y1 的概率 z z z 表示输入特征 x x x 的线性组合加上一个偏置项 b b b即 z ∑ i n w i x i b z \displaystyle\sum_{i}^{n}w_ix_i b zi∑n​wi​xi​b。 w i w_i wi​ 为特征 x i x_i xi​ 的权重通过对训练数据进行最大似然估计或梯度下降等优化可以确定最佳的权重参数 w w w 和偏置项 b b b。 如果我们把 z z z 展开那么可以得到如下 $$ z \begig{bmatrix} \theta_0 \theta_1 \cdots \theta_n \end{bmatrix}\begin{bmatrix}x_0 \ x_1 \ \vdots \ x_n \end{bmatrix} b \theta^Tx b $$ h θ ( x ) g ( θ T x b ) g ( z ) 1 1 e − z h_\theta(x) g(\theta^Tx b) g(z) \frac{1}{1 e^{-z}} hθ​(x)g(θTxb)g(z)1e−z1​ 其中 θ \theta θ 是参数列向量要求解的 x x x 是样本列向量给定的数据集。通过 sigmoid 函数可以将任意实数映射到 [0, 1] 区间。 h θ ( x ) h_\theta(x) hθ​(x) 给出了输出变量为 1 1 1 的概率比如 h θ ( x ) 0.7 h_\theta(x)0.7 hθ​(x)0.7 表示有 70 % 70\% 70% 的概率判定类别为 1 1 1有 30 % 30\% 30% 的概率判定类别为 0 0 0。 现在给出一个新的样本如果我们能找到合适的参数列向量 θ ( [ θ 0 , θ 1 , . . . , θ n ] ) \theta([\theta_0, \theta_1, ..., \theta_n]) θ([θ0​,θ1​,...,θn​])那么我们就可以将样本数据直接代入 sigmoid 函数中进行求解得到其类别为 1 1 1 或 0 0 0 的概率进而判定其所属类别。 求解参数 $\theta $ 那么问题来了我们该如何得到合适的参数向量 θ \theta θ根据逻辑回归模型的表达式可以得到如下 p ( y 1 ∣ x ; θ ) h θ ( x ) p ( y 0 ∣ x ; θ ) 1 − h θ ( x ) p(y1|x;\theta) h_\theta(x) \\ p(y0|x;\theta) 1 - h_\theta(x) p(y1∣x;θ)hθ​(x)p(y0∣x;θ)1−hθ​(x) 理想状态下我们希望对每个样本的类别预测概率均为 1 1 1也就是完全分类正确。但在实际情况中很难做到如此完美样本的类别预测概率越接近 1 1 1其分类结果越准确。一个样本属于正样本的概率为 0.51 0.51 0.51我们可以说它是正样本另一个样本属于正样本的概率为 0.99 0.99 0.99我们也可以说它是正样本但显然第二个样本的预测概率更高更具说服力。我们可以将上述两个类别的条件概率合二为一得到如下 L o s s ( h θ ( x ) , y ) h θ ( x ) y ( 1 − h θ ( x ) ) ( 1 − y ) Loss(h_\theta(x), y) h_\theta(x)^y(1 - h_\theta(x))^{(1 - y)} Loss(hθ​(x),y)hθ​(x)y(1−hθ​(x))(1−y) 我们称上式为损失函数Loss Function。当 y 1 y1 y1 时第二项为 0 0 0当 y 0 y0 y0 时第一项为 0 0 0。为了简化问题我们可以对整个表达式进行求对数得到如下 L o s s ( h θ ( x ) , y ) y log ⁡ h θ ( x ) ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) Loss(h_\theta(x), y) y \log h_\theta(x) (1 - y) \log (1 - h_\theta(x)) Loss(hθ​(x),y)yloghθ​(x)(1−y)log(1−hθ​(x)) 上述损失函数是对于一个样本而言的。假定样本之间相互独立那么整个样本集的预测概率即为所有样本预测概率的乘积基于此可得到如下公式 J ( θ ) ∑ i m y ( i ) log ⁡ ( h θ ( x ( i ) ) ) ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) J(\theta ) \displaystyle\sum_{i}^{m}y^{(i)}\log (h_\theta(x^{(i)})) (1 - y^{(i)})\log (1 - h_\theta(x^{(i)})) J(θ)i∑m​y(i)log(hθ​(x(i)))(1−y(i))log(1−hθ​(x(i))) − J ( θ ) − ∑ i m y ( i ) log ⁡ ( h θ ( x ( i ) ) ) ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) -J(\theta ) -\displaystyle\sum_{i}^{m}y^{(i)}\log (h_\theta(x^{(i)})) (1 - y^{(i)})\log (1 - h_\theta(x^{(i)})) −J(θ)−i∑m​y(i)log(hθ​(x(i)))(1−y(i))log(1−hθ​(x(i))) 其中 m m m 为样本总数 y ( i ) y^{(i)} y(i) 表示第 i i i 个样本的类别 x ( i ) x^{(i)} x(i) 表示第 i i i 个样本。由此可以得出满足 J ( θ ) J(\theta) J(θ) 最大或满足 − J ( θ ) -J(\theta) −J(θ) 最小的 θ \theta θ 值就是我们需要求解的答案。 为了使得 J ( θ ) J(\theta) J(θ) 最大我们可以使用最大似然估计、梯度上升或梯度下降优化算法求解参数 θ \theta θ。当损失函数为 J ( θ ) J(\theta) J(θ) 时可以使用梯度上升算法对参数 θ \theta θ 进行优化当损失函数为 − J ( θ ) -J(\theta) −J(θ) 时可以使用梯度下降算法对参数 θ \theta θ 进行优化。 梯度上升优化算法 假设存在一个函数 f ( x ) − x 2 4 x f(x) -x^2 4x f(x)−x24x如何计算该函数的极值该函数的曲线如下图所示 显然该函数的曲线开口向下存在极大值。我们可以运用中学所学的知识对其求极值其导数为 f ′ ( x ) − 2 x 4 f(x) -2x 4 f′(x)−2x4令导数为 0 0 0可得出 x 2 x2 x2 即为该函数的极大值点且极大值为 4 4 4。 但在实际情况中函数不会像上面那样简单就算求出了函数的导数也很难精确计算出函数的极值此时可以考虑用迭代的方法逼近极值。这种通过迭代逼近寻找最佳拟合参数的方法就叫做最优化算法。值更新的公式表示如下 x i 1 x i α ⋅ ∂ f ( x i ) x i x_{i1} x_i \alpha · \frac{\partial f(x_i)}{x_i} xi1​xi​α⋅xi​∂f(xi​)​ 其中 α \alpha α 为步长也就是学习率Learning Rate用于控制更新的幅度。更新示意图如下所示 比如从 ( 0 , 0 ) (0, 0) (0,0) 开始迭代路径为 1 - 2 - 3 - 4 - ··· - n直到求出的 f ( x ) f(x) f(x) 为函数极大值的近似值。迭代逼近函数极大值的代码实现如下 # 梯度上升 def gradient_ascent(alpha0.01, precision0.00000001)::param alpha: 学习率:param precision: 停止迭代的阈值:return: 逼近函数极值的极值点# 偏导表达式def partial_derivative(x_old):return -2 * x_old 4x_old -1 # 初始值给一个小于 x_new 的值x_new 0 # 梯度上升的起点即从 (0, 0) 开始while abs(x_new - x_old) precision:x_old x_newx_new x_old alpha * partial_derivative(x_old)return x_newif __name__ __main__:result gradient_ascent()print(result) --------- 1.999999515279857从上面可以看出结果已经非常接近真实极值点 x 2 x2 x2上述用到的就是梯度上升优化算法。同理 J ( θ ) J(\theta) J(θ) 这个损失函数的极值点也可以这样求出只要计算出 J ( θ ) J(\theta) J(θ) 的偏导就可以利用梯度上升算法求解出 J ( θ ) J(\theta) J(θ) 的极大值。 J ( θ ) J(\theta) J(θ) 关于 θ \theta θ 的偏导求解过程如下 ∂ J ( θ ) θ j ∂ J ( θ ) ∂ g ( θ T x ) ∗ ∂ g ( θ T x ) ∂ θ T x ∗ ∂ θ T x ∂ θ j \frac{\partial J(\theta)}{\theta_j} \frac{\partial J(\theta)}{\partial g(\theta^Tx)} * \frac{\partial g(\theta^Tx)}{\partial \theta^Tx} * \frac{\partial \theta^Tx}{\partial \theta_j} θj​∂J(θ)​∂g(θTx)∂J(θ)​∗∂θTx∂g(θTx)​∗∂θj​∂θTx​ 其中 ∂ J ( θ ) ∂ g ( θ T x ) y ∗ 1 g ( θ T x ) ( y − 1 ) ∗ 1 1 − g ( θ T x ) \frac{\partial J(\theta)}{\partial g(\theta^Tx)} y * \frac{1}{g(\theta^Tx)} (y - 1) * \frac{1}{1 - g(\theta^Tx)} ∂g(θTx)∂J(θ)​y∗g(θTx)1​(y−1)∗1−g(θTx)1​ g ′ ( z ) d 1 1 e − z d z g ( z ) ( 1 − g ( z ) ) ⟹ ∂ g ( θ T x ) ∂ θ T x g ( θ T x ) ( 1 − g ( θ T x ) ) g(z) \frac{d\frac{1}{1 e^{-z}}}{dz} g(z)(1-g(z)) \implies \frac{\partial g(\theta^Tx)}{\partial \theta^Tx} g(\theta^Tx)(1 - g(\theta^Tx)) g′(z)dzd1e−z1​​g(z)(1−g(z))⟹∂θTx∂g(θTx)​g(θTx)(1−g(θTx)) ∂ θ T x θ j ∂ J ( θ 1 x 1 θ 2 x 2 ⋯ θ n x n ) ∂ θ j x j \frac{\partial \theta^Tx}{\theta_j} \frac{\partial J(\theta_1x_1 \theta_2x_2 \cdots \theta_nx_n)}{\partial \theta_j} x_j θj​∂θTx​∂θj​∂J(θ1​x1​θ2​x2​⋯θn​xn​)​xj​ 综上可得 ∂ J ( θ ) θ j ( y − h θ ( x ) ) x j \frac{\partial J(\theta)}{\theta_j} (y - h_\theta(x))x_j θj​∂J(θ)​(y−hθ​(x))xj​ 上述即为 J ( θ ) J(\theta) J(θ) 关于 θ \theta θ 的偏导有了偏导我们可以进一步推导出梯度上升中的值更新公式 θ j _ n e w θ j _ o l d α ⋅ ∑ i 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_{j\_new} \theta_{j\_old} \alpha \cdot \displaystyle\sum_{i1}^{m}(y^{(i)} - h_\theta(x^{(i)}))x_j^{(i)} θj_new​θj_old​α⋅i1∑m​(y(i)−hθ​(x(i)))xj(i)​ 有了上述这些公式我们就可以编写代码计算出损失函数的最佳拟合参数。 Logistic 回归简单实现 有一个简单的数据集其数据格式如下图所示 该数据集共有三列数据前两列为特征数据最后一列为标签数据。我们可以将第一列特征数据看作 x x x 轴上的值将第二列特征数据看作 y y y 轴上的值根据对应标签的不同对这些样本点进行分类。 代码实现如下 import numpy as np import matplotlib.pyplot as plt# 读取数据集 def read_dataset(file_path: str) - (list, list)::param file_path: 数据集的路径:return: 训练数据训练标签data [] # 用于存储特征数据(100, 3)三列分别表示 w0偏置项、w1第一列特征数据权重、w2第二列特征数据权重labels [] # 用于存储标签数据(100,)file open(file_path)for line in file.readlines():line_list line.strip().split()data.append([1.0, float(line_list[0]), float(line_list[1])])labels.append(int(line_list[2]))file.close()return data, labels# 绘制样本分布图 def data_distribution(data: list, labels: list) - None::param data: 训练数据:param labels: 训练标签:return: 数据分布图data_arr np.array(data) # 转成数组num_samples data_arr.shape[0] # 获取样本个数x0_feature [] # 存放标签为 0 的第一列中的特征数据y0_feature [] # 存放标签为 0 的第二列中的特征数据x1_feature [] # 存放标签为 1 的第一列中的特征数据y1_feature [] # 存放标签为 1 的第二列中的特征数据for i in range(num_samples):if labels[i] 1: # 1 为正样本x1_feature.append(data[i][1])y1_feature.append(data[i][2])else: # 0 为负样本x0_feature.append(data[i][1])y0_feature.append(data[i][2])# 绘图fig plt.figure()ax fig.add_subplot(111)ax.scatter(x1_feature, y1_feature, s20, cr, markers, alpha.5)ax.scatter(x0_feature, y0_feature, s20, cg, alpha.5)plt.title(data distribution)plt.xlabel(x)plt.ylabel(y)plt.show()# sigmoid 函数 def sigmoid(z)::param z: 目标值表达式:return: sigmoid 表达式return 1.0 / (1 np.exp(-z))# 梯度上升 def gradient_ascent(data: list, labels: list, alpha0.001, num_iteration500) - np.ndarray::param data: 训练数据:param labels: 训练标签:param alpha: 学习率:param num_iteration: 迭代次数:return: 参数权重data_mat np.mat(data) # 转成矩阵labels_mat np.mat(labels).transpose() # 转成矩阵并进行转置n data_mat.shape[1] # data 的列数3weights np.ones((n, 1)) # 有几个特征就有几个参数这里有 3 个特征因此有 3 个参数# 训练模型得到参数权重for i in range(num_iteration):h sigmoid(data_mat * weights) # 预测值(100, 1)error labels_mat - h # 真实值 - 预测值(100, 1)weights weights alpha * data_mat.transpose() * error # w_new w_old α * x^T * (y - y)return weights.getA() # 将矩阵转换为数组并返回权重数组# 通过求解出的参数回归系数可以确定不同类别数据之间的分隔线从而绘制出决策边界 def decision_boundary(data: list, labels: list, weights: np.ndarray) - None::param data: 训练数据:param labels: 训练标签:param weights: 参数权重:return: 决策边界图data_arr np.array(data) # 转成数组num_samples data_arr.shape[0] # 获取样本个数x0_feature [] # 存放标签为 0 的第一列中的特征数据y0_feature [] # 存放标签为 0 的第二列中的特征数据x1_feature [] # 存放标签为 1 的第一列中的特征数据y1_feature [] # 存放标签为 1 的第二列中的特征数据for i in range(num_samples):if labels[i] 1: # 1 为正样本x1_feature.append(data[i][1])y1_feature.append(data[i][2])else: # 0 为负样本x0_feature.append(data[i][1])y0_feature.append(data[i][2])# 绘图fig plt.figure()ax fig.add_subplot(111)ax.scatter(x1_feature, y1_feature, s20, cr, markers, alpha.5)ax.scatter(x0_feature, y0_feature, s20, cg, alpha.5)x np.arange(-3.0, 3.0, 0.1)y -(weights[0] weights[1] * x) / weights[2]ax.plot(x, y)plt.title(best fit)plt.xlabel(x1)plt.ylabel(x2)plt.show()if __name__ __main__:file_path rD:\MachineLearning\testSet.txt# 获取训练数据和训练标签data, labels read_dataset(file_path)# 查看样本分布# data_distribution(data, labels)# 获取权重weights gradient_ascent(data, labels) # 得到一个形状为 (3, 1) 的权重数组print(weights)# 查看决策边界decision_boundary(data, labels, weights) weights 是一个包含三个元素的数组 [w0, w1, w2]其中 w0 是偏置项或者称为截距w1 和 w2 分别是特征一和特征二的权重 在二维空间中线性分类器的决策边界通常是一条直线其方程可以表示为 w0 w1*x1 w2*x2 0其中 (x1, x2) 是特征一和特征二的取值 将上述方程稍作变换就可以得到 - (w0 w1*x) / w2其中 x x1也就是特征一的取值。这个表达式描述了特征一和特征二之间的决策边界可以用来在二维平面上画出分类器的决策边界直线。--------- [[ 4.12414349][ 0.48007329][-0.6168482 ]]上述代码在进行梯度上升优化时每次都需要计算整个数据集计算复杂度太高我们可以使用随机梯度上升算法对其进行改进。主要改进有两点第一点是动态调整学习率使得学习率随着迭代次数的增加而减小第二点是使用一个样本数据进行参数的更新样本数据随机选取且下一次迭代将从未使用过的样本点中选取。随机梯度上升算法可以有效地减少计算量并保证回归效果。 经过综合对比我们可以得到以下结论 当数据集较小时使用梯度上升算法效果较好当数据集较大时使用改进的随机梯度上升算法效果较好 使用 sklearn 构建 Logistic 回归分类器 sklearn.linear_model 模块实现了 Logistic 回归算法不仅如此该模块还提供了很多模型供我们使用比如 Lasso 回归、脊回归等。LogisticRegression 函数实现如下所示 sklearn.linear_model.LogisticRegression(penaltyl2, dualFalse, tol0.0001, C1.0, fit_interceptTrue, intercept_scaling1, class_weightNone, random_stateNone, solverlbfgs, max_iter100, multi_classauto, verbose0, warm_startFalse, n_jobsNone, l1_ratioNone)- penalty有 l1、l2、elasticnet、None 四个值可供选择默认为 l2l1 表示添加 l1 正则化假设模型的参数满足拉普拉斯分布l2 表示添加 l2 正则化假设模型的参数满足高斯分布elasticnet 表示添加 l1 和 l2 正则化None 表示不添加正则项所谓的正则项就是对参数施加一种约束使得模型避免发生过拟合的现象但是不一定加约束就更好只能说在加约束的情况下理论上应该可以获得泛华能力更强的结果- dual布尔值默认为 False二元公式仅适用于 liblinear 求解器的 l2 惩罚当 n_samples n_features 时首选 dualFalse- tol停止求解的标准即求解到多少认为已经求出最优解默认为 1e-4- C正则化强度的倒数必须是正浮点数默认为 1.0与 SVM 一样数值越小正则化强度越大- fit_intercept是否存在截距或偏差即偏置项默认为 True- intercept_scaling只有在使用求解器 liblinear 且 fit_interceptTrue 时才有用默认为 1- class_weight用于标示分类模型中各种类型的权重可以是一个字典或 balanced 字符串默认为 None举个例子对于 0、1 的二元模型我们可以定义 class_weight{0: 0.9, 1: 0.1}这样类型 0 的权重为 90%而类型 1 的权重为 10%如果 class_weight 选择 balanced那么类库会根据训练样本量来计算权重某种类型样本量越多则权重越低样本量越少则权重越高类权重计算方法为 n_samples / (n_classes * np.bincount(y))n_samples 为样本数n_classes 为类别数量np.bincount(y) 会输出每个类的样本数例如 y[1, 0, 0, 1, 1]则 np.bincount(y)[2, 3]- random_state随机数种子默认为 None仅在 solver 为 sag、saga、liblinear 时有用- solver优化算法默认为 lgfgs对于小数据集liblinear 是个不错的选择而对于大数据集sag 和 saga 速度更快对于多分类问题只有 newton-cg、sag、saga、lbfgs 能够处理多项式损失而 liblinear 受限于一对剩余OvR就是用 liblinear 的时候如果是多分类问题得先把一种类别作为一个类别剩余的所有类别作为另外一个类别依次类推遍历所有类别从而进行分类newton-cg、sag、lbfgs 这三种优化算法都需要损失函数的一阶或者二阶连续导数因此不能用于没有连续导数的 L1 正则化只能用于 L2 正则化而 liblinear 和 saga 通吃 L1 和 L2 正则化liblinear 使用了开源的 liblinear 库内部使用了坐标轴下降法来迭代优化损失函数lbfgs 是拟牛顿法的一种利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数newton-cg 是牛顿法家族中的一种利用海森矩阵来迭代优化sag 是随机平均梯度下降属于梯度下降法的变种与普通梯度下降法的区别是每次迭代仅用一部分样本来计算梯度适用于样本量多的情况saga 是线性收敛的随机优化算法的变种- max_iter算法收敛的最大迭代次数默认为 100- multi_class分类方式有 auto、ovr、multinomial 可供选择默认为 auto如果选择的是 ovr那么每个标签都会拟合出一个二元问题当求解器为 liblinear 时multinomial 不可用如果数据是二元的或者求解器为 liblinearauto 会选择 ovr其他情况则选择 multinomial- verbose日志冗长度默认为 0即不输出训练过程为 1 的时候偶尔输出结果大于 1 时对每个子模型都输出结果- warm_start热启动参数默认为 False如果为 True则下一次训练以追加树的形式进行- n_jobs并行数默认为 1如果为 2则表示用 CPU 的 2 个内核运行程序如果为 -1则表示用所有内核运行- l1_ratioelasticnet 的混合参数仅在 penaltyelasticnet 时使用如果为 0则表示使用 l2 正则化由 LogisticRegression 创建的实例对象 clf 具有以下方法 decision_function(X) # 预测样本的置信度得分- X训练数据形状为 (n_samples, n_features)返回形状为 (n_samples, n_classes) 的置信度得分densify() # 将系数矩阵转换为密集数组格式fit(X, y, sample_weightNone) # 根据训练集拟合分类器- X训练数据形状为 (n_samples, n_features)- y目标值训练样本对应的标签形状为 (n_samples,)- sample_weight样本权重如果为 None则样本权重相同返回拟合的逻辑回归分类器get_params(deepTrue) # 以字典形式返回 MultinomialNB 类的参数- deep布尔值默认为 True返回参数predict(X) # 预测所提供数据的类别标签- X预测数据形状为 (n_samples, n_features)以 np.ndarray 形式返回形状为 (n_samples,) 的每个数据样本的类别标签predict_log_proba(X) # 返回预测数据 X 在各类别标签中所占的对数概率- X预测数据形状为 (n_samples, n_features)返回该样本在各类别标签中的预测对数概率类别的顺序与属性 classes_ 中的顺序一致predict_proba(X) # 返回预测数据 X 在各类别标签中所占的概率- X预测数据形状为 (n_samples, n_features)返回该样本在各类别标签中的预测概率类别的顺序与属性 classes_ 中的顺序一致score(X, y, sample_weightNone) # 返回预测结果和标签之间的平均准确率- X预测数据形状为 (n_samples, n_features)- y预测数据的目标值真实标签- sample_weight默认为 None返回预测数据的平均准确率相当于先执行了 self.predict(X)而后再计算预测值和真实值之间的平均准确率from sklearn.linear_model import LogisticRegressiondef colicSklearn():frTrain open(rD:\MachineLearning\horseColicTraining.txt) # 打开训练集frTest open(rD:\MachineLearning\horseColicTest.txt) # 打开测试集trainingSet []trainingLabels []testSet []testLabels []for line in frTrain.readlines():currLine line.strip().split(\t)lineArr []for i in range(len(currLine) - 1):lineArr.append(float(currLine[i]))trainingSet.append(lineArr)trainingLabels.append(float(currLine[-1]))for line in frTest.readlines():currLine line.strip().split(\t)lineArr []for i in range(len(currLine) - 1):lineArr.append(float(currLine[i]))testSet.append(lineArr)testLabels.append(float(currLine[-1]))classifier LogisticRegression(solverliblinear, max_iter10).fit(trainingSet, trainingLabels)test_accurcy classifier.score(testSet, testLabels) * 100print(正确率:%f%% % test_accurcy)if __name__ __main__:colicSklearn() --------- 正确率:73.134328%Logistic 回归算法的优缺点 优点 算法简单易于理解和实现计算效率高。可以处理二分类和多分类问题。对特征之间的关联性不敏感适用于处理高维数据。输出结果具有概率解释可以用于判断样本属于某个类别的概率。 缺点 假设特征与目标变量之间存在线性关系无法处理非线性关系。对异常值和缺失值比较敏感需要进行数据预处理。容易出现欠拟合或过拟合的情况需要进行正则化处理。无法处理特征之间的交互作用。
http://www.sczhlp.com/news/157604/

相关文章:

  • WordPress 熊掌号模板网络推广优化的英文
  • 网站做非经营性广告需备案网站建设制作公司哪家
  • 宁波网站制作公司排名网页制作教程零基础学会
  • 建设网站投资多少钱福安城乡建设与规划局网站
  • 淘宝客做自己网站博客网站怎么做
  • 做网站公司哪家常见的网络营销模式
  • 福州++网站建设uc浏览器导航
  • CPU温度查看(Core Temp)
  • 实用指南:Python虚拟环境管理工具virtualenv详解
  • 命令行实用技巧
  • Day09
  • 商务网站建设过程做哪个app软件
  • 黄页网站推广服务开发网站需要哪些技术
  • 自助建站系统免费加盟网站建设教程 项目式
  • 企业网站免费源码上海手机网站建设
  • 朝阳区社区建设网站南昌地宝网分类
  • 怎么制作网站详细教程视频网站备案 多久
  • ps设计师网站有哪些奥利奥广告策划书
  • 廊坊网站建设设计wordpress 主题 引入js
  • 宁波网站推广方法那个网站做3d
  • 中英文双语的网站怎么建设全国被执行人名单查询
  • 网站域名备案更改视频剪辑自学网站
  • 建网站啦盐城中小企业网络推广
  • 网站代码优化所有标签网络服务商主要包括哪些方面
  • 网站媒体给房开做内容推广高端服装品牌排行榜
  • 福建建设人才市场官方网站郑州快速排名优化网站
  • 南充网站建设价格工业和信息化部网站备案
  • ppt哪个网站质量高网站如何进行代码优化
  • 平顶山公司做网站企业简介优势项目案例等推广
  • 宝应123网站建设网中国万网创始人张向东