机器学习算法总结--线性回归和逻辑回归

2023-11-11

1. 线性回归
简述

在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合(自变量都是一次方)。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。

优点:结果易于理解,计算上不复杂。
缺点:对非线性数据拟合不好。
适用数据类型:数值型和标称型数据。
算法类型:回归算法

线性回归的模型函数如下:
h θ = θ T x h_\theta = \theta ^T x hθ=θTx
它的损失函数如下:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = {1\over {2m}} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2
通过训练数据集寻找参数的最优解,即求解可以得到 m i n J ( θ ) minJ(\theta) minJ(θ)的参数向量 θ \theta θ,其中这里的参数向量也可以分为参数 和 w 和 b 和w和b wb,分别表示权重和偏置值。

求解最优解的方法有最小二乘法和梯度下降法

梯度下降法

梯度下降算法的思想如下(这里以一元线性回归为例):

首先,我们有一个代价函数,假设是 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1),我们的目标是 m i n θ 0 , θ 1 J ( θ 0 , θ 1 ) min_{\theta_0,\theta_1}J(\theta_0,\theta_1) minθ0,θ1J(θ0,θ1)
接下来的做法是:

  • 首先是随机选择一个参数的组合 ( θ 0 , θ 1 ) (\theta_0,\theta_1) (θ0,θ1),一般是设 θ 0 = 0 , θ 1 = 0 \theta_0 = 0,\theta_1 = 0 θ0=0,θ1=0;
  • 然后是不断改变 ( θ 0 , θ 1 ) (\theta_0,\theta_1) (θ0,θ1),并计算代价函数,直到一个局部最小值。之所以是局部最小值,是因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值,选择不同的初始参数组合,可能会找到不同的局部最小值。
    下面给出梯度下降算法的公式:

repeat until convergence{

θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( f o r j = 0 a n d j = 1 ) \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta_0,\theta_1)\quad (for\quad j=0 \quad and\quad j=1) θj:=θjαθjJ(θ0,θ1)(forj=0andj=1)

}

也就是在梯度下降中,不断重复上述公式直到收敛,也就是找到 局 部 最 小 值 局 部 最 小 值 局部最小值\color{red}{局部最小值} 。其中符号:=是赋值符号的意思。

而应用梯度下降法到线性回归,则公式如下:
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) )   θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) ) \theta_0 := \theta_0 - \alpha \frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})\ \\ \theta_1 := \theta_1 - \alpha \frac{1}{m}\sum_{i=1}^m ((h_\theta(x^{(i)}) - y^{(i)}) \cdot x^{(i)}) θ0:=θ0αm1i=1m(hθ(x(i))y(i)) θ1:=θ1αm1i=1m((hθ(x(i))y(i))x(i))
公式中的 α \alpha α称为学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈进的步子有多大。

在梯度下降中,还涉及都一个参数更新的问题,即更新 ( θ 0 , θ 1 ) (\theta_0,\theta_1) (θ0,θ1),一般我们的做法是同步更新。

最后,上述梯度下降算法公式实际上是一个叫批量梯度下降(batch gradient descent),即它在每次梯度下降中都是使用整个训练集的数据,所以公式中是带有 ∑ i = 1 m \sum_{i=1}^m i=1m

岭回归(ridge regression):

岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价,获得回归系数更为符合实际、更可靠的回归方法,对病态数据的耐受性远远强于最小二乘法。

岭回归分析法是从根本上消除复共线性影响的统计方法。岭回归模型通过在相关矩阵中引入一个很小的岭参数K(1>K>0),并将它加到主对角线元素上,从而降低参数的最小二乘估计中复共线特征向量的影响,减小复共线变量系数最小二乘估计的方法,以保证参数估计更接近真实情况。岭回归分析将所有的变量引入模型中,比逐步回归分析提供更多的信息。

其他回归还可以参考这篇文章

代码实现

Python实现的代码如下:

#Import Library
#Import other necessary libraries like pandas, numpy...
from sklearn import linear_model
#Load Train and Test datasets
#Identify feature and response variable(s) and values must be numeric and numpy arrays

x_train=input_variables_values_training_datasets
y_train=target_variables_values_training_datasets
x_test=input_variables_values_test_datasets

# Create linear regression object
linear = linear_model.LinearRegression()

# Train the model using the training sets and check score
linear.fit(x_train, y_train)
linear.score(x_train, y_train)

#Equation coefficient and Intercept
print('Coefficient: \n', linear.coef_)
print('Intercept: \n', linear.intercept_)

#Predict Output
predicted= linear.predict(x_test)

上述是使用sklearn包中的线性回归算法的代码例子,下面是一个实现的具体例子。

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 17 10:36:06 2016

@author: cai
"""

import os
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from sklearn import linear_model

# 计算损失函数
def computeCost(X, y, theta):
    inner = np.power(((X * theta.T) - y), 2)
    return np.sum(inner) / (2 * len(X))

# 梯度下降算法
def gradientDescent(X, y, theta, alpha, iters):
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)

    for i in range(iters):
        error = (X * theta.T) - y

        for j in range(parameters):
            # 计算误差对权值的偏导数
            term = np.multiply(error, X[:, j])
            # 更新权值
            temp[0, j] = theta[0, j] - ((alpha / len(X)) * np.sum(term))

        theta = temp
        cost[i] = computeCost(X, y, theta)
    return theta, cost

dataPath = os.path.join('data', 'ex1data1.txt')
data = pd.read_csv(dataPath, header=None, names=['Population', 'Profit'])
# print(data.head())
# print(data.describe())
# data.plot(kind='scatter', x='Population', y='Profit', figsize=(12, 8))
# 在数据起始位置添加1列数值为1的数据
data.insert(0, 'Ones', 1)
print(data.shape)

cols = data.shape[1]
X = data.iloc[:, 0:cols-1]
y = data.iloc[:, cols-1:cols]

# 从数据帧转换成numpy的矩阵格式
X = np.matrix(X.values)
y = np.matrix(y.values)
# theta = np.matrix(np.array([0, 0]))
theta = np.matrix(np.zeros((1, cols-1)))
print(theta)
print(X.shape, theta.shape, y.shape)
cost = computeCost(X, y, theta)
print("cost = ", cost)

# 初始化学习率和迭代次数
alpha = 0.01
iters = 1000

# 执行梯度下降算法
g, cost = gradientDescent(X, y, theta, alpha, iters)
print(g)

# 可视化结果
x = np.linspace(data.Population.min(),data.Population.max(),100)
f = g[0, 0] + (g[0, 1] * x)

fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Training Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')

fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(np.arange(iters), cost, 'r')
ax.set_xlabel('Iteration')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')


# 使用sklearn 包里面实现的线性回归算法
model = linear_model.LinearRegression()
model.fit(X, y)

x = np.array(X[:, 1].A1)
# 预测结果
f = model.predict(X).flatten()
# 可视化
fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Training Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size(using sklearn)')
plt.show()

上述代码参考自Part 1 - Simple Linear Regression。具体可以查看我的Github

2. 逻辑回归
简述

Logistic回归算法基于Sigmoid函数,或者说Sigmoid就是逻辑回归函数。Sigmoid函数定义如下:
1 1 + e − z \frac{1}{1+e^{-z}} 1+ez1。函数值域范围(0,1)。

因此逻辑回归函数的表达式如下:
h θ ( x ) = g ( θ T X ) = 1 1 + e − θ T X 其 中 , g ( z ) = 1 1 + e − z h_\theta(x) =g(\theta^T X) = \frac{1}{1+e^{-\theta^TX}} \\ 其中,g(z) = \frac{1}{1+e^{-z}} hθ(x)=g(θTX)=1+eθTX1g(z)=1+ez1
其导数形式为:
g ′ ( z ) = d d z 1 1 + e − z = 1 ( 1 + e − z ) 2 ( e − z ) = 1 1 + e − z ( 1 − 1 1 + e − z ) = g ( z ) ( 1 − g ( z ) ) g\prime (z) = \frac{d}{dz} \frac{1}{1+e^{-z}} \\ = \frac{1}{(1+e^{-z})^2} (e^{-z}) \\ = \frac{1}{1+e^{-z}} (1- \frac{1}{1+e^{-z}}) \\ = g(z)(1-g(z)) g(z)=dzd1+ez1=(1+ez)21(ez)=1+ez1(11+ez1)=g(z)(1g(z))

代价函数

逻辑回归方法主要是用最大似然估计来学习的,所以单个样本的后验概率为:
p ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y p(y | x; \theta) = (h_\theta(x))^y(1-h_\theta(x))^{1-y} p(yx;θ)=(hθ(x))y(1hθ(x))1y
到整个样本的后验概率就是:
L ( θ ) = p ( y ∣ X ; θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m ( h θ ( x ( i ) ) ) y ( i ) ( 1 − h θ ( x ( i ) ) ) 1 − y ( i ) L(\theta) = p(y | X;\theta) \\ = \prod_{i=1}^{m} p(y^{(i)} | x^{(i)};\theta)\\ = \prod_{i=1}^{m} (h_\theta(x^{(i)}))^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}} L(θ)=p(yX;θ)=i=1mp(y(i)x(i);θ)=i=1m(hθ(x(i)))y(i)(1hθ(x(i)))1y(i)
其中, P ( y = 1 ∣ x ; θ ) = h θ ( x ) , P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(y=1|x;\theta) = h_\theta(x), P(y=0|x;\theta)=1-h_\theta(x) P(y=1x;θ)=hθ(x),P(y=0x;θ)=1hθ(x)

通过对数进一步简化有: l ( θ ) = l o g L ( θ ) = ∑ i = 1 m y ( i ) l o g h ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h ( x ( i ) ) ) l(\theta) = logL(\theta) = \sum_{i=1}^{m}y^{(i)}logh(x^{(i)})+(1-y^{(i)})log(1-h(x^{(i)})) l(θ)=logL(θ)=i=1my(i)logh(x(i))+(1y(i))log(1h(x(i))).

而逻辑回归的代价函数就是 − l ( θ ) -l(\theta) l(θ)。也就是如下所示:
J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} [\sum_{i=1}^my^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)}log(1-h_\theta(x^{(i)}))] J(θ)=m1[i=1my(i)loghθ(x(i))+(1y(i)log(1hθ(x(i)))]
同样可以使用梯度下降算法来求解使得代价函数最小的参数。其梯度下降法公式为:

这里写图片描述

这里写图片描述

总结

优点

1、实现简单;

2、分类时计算量非常小,速度很快,存储资源低;

缺点:

1、容易欠拟合,一般准确度不太高

2、只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;

适用数据类型:数值型和标称型数据。
类别:分类算法。
试用场景:解决二分类问题。

代码实现

首先是采用sklearn包中的逻辑回归算法代码:

#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create logistic regression object

model = LogisticRegression()

# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)

#Equation coefficient and Intercept
print('Coefficient: \n', model.coef_)
print('Intercept: \n', model.intercept_)

#Predict Output
predicted= model.predict(x_test)

接下来则是应用例子,如下所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time    : 2016/10/19 21:35
@Author  : cai

实现多类的逻辑回归算法
"""
import os
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from scipy.optimize import minimize
from scipy.io import loadmat

# 定义Sigmoid函数
def sigmoid(z):
    return 1 / (1 + np.exp(-z))

# 定义 cost函数
def costReg(theta, X, y, lambdas):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    h = X * theta.T
    first = np.multiply(-y, np.log(sigmoid(h)))
    second = np.multiply((1-y), np.log(1 - sigmoid(h)))
    reg = (lambdas / 2 * len(X)) * np.sum(np.power(theta[:, 1:theta.shape[1]], 2))
    return np.sum(first - second) / (len(X)) + reg

# 梯度下降算法的实现, 输出梯度对权值的偏导数
def gradient(theta, X, y, lambdas):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)

    parameters = int(theta.ravel().shape[1])
    grad = np.zeros(parameters)
    # 计算误差
    error = sigmoid(X * theta.T) - y

    grad = ((X.T * error) / len(X)).T + ((lambdas / len(X)) * theta)

    grad[0, 0] = np.sum(np.multiply(error, X[:, 0])) / len(X)

    return np.array(grad).ravel()

# 实现一对多的分类方法
def one_vs_all(X, y, num_labels, lambdas):
    rows = X.shape[0]
    params = X.shape[1]

    # 每个分类器有一个 k * (n+1)大小的权值数组
    all_theta = np.zeros((num_labels, params + 1))

    # 增加一列,这是用于偏置值
    X = np.insert(X, 0, values=np.ones(rows), axis=1)

    # 标签的索引从1开始
    for i in range(1, num_labels + 1):
        theta = np.zeros(params + 1)
        y_i = np.array([1 if label == i else 0 for label in y])
        y_i = np.reshape(y_i, (rows, 1))

        # 最小化损失函数
        fmin = minimize(fun=costReg, x0=theta, args=(X, y_i, lambdas), method='TNC', jac=gradient)
        all_theta[i-1, :] = fmin.x

    return all_theta

def predict_all(X, all_theta):
    rows = X.shape[0]
    params = X.shape[1]
    num_labels = all_theta.shape[0]

    # 增加一列,这是用于偏置值
    X = np.insert(X, 0, values=np.ones(rows), axis=1)

    X = np.matrix(X)
    all_theta = np.matrix(all_theta)

    # 对每个训练样本计算其类的概率值
    h = sigmoid(X * all_theta.T)

    # 获取最大概率值的数组索引
    h_argmax = np.argmax(h, axis=1)
    # 数组是从0开始索引,而标签值是从1开始,所以需要加1
    h_argmax = h_argmax + 1

    return h_argmax

dataPath = os.path.join('data', 'ex3data1.mat')
# 载入数据
data = loadmat(dataPath)
print(data)
print(data['X'].shape, data['y'].shape)

# print(np.unique(data['y']))
# 测试
# rows = data['X'].shape[0]
# params = data['X'].shape[1]
#
# all_theta = np.zeros((10, params + 1))
#
# X = np.insert(data['X'], 0, values=np.ones(rows), axis=1)
#
# theta = np.zeros(params + 1)
#
# y_0 = np.array([1 if label == 0 else 0 for label in data['y']])
# y_0 = np.reshape(y_0, (rows, 1))
# print(X.shape, y_0.shape, theta.shape, all_theta.shape)

all_theta = one_vs_all(data['X'], data['y'], 10, 1)
print(all_theta)

# 计算分类准确率
y_pred = predict_all(data['X'], all_theta)
correct = [1 if a == b else 0 for (a, b) in zip(y_pred, data['y'])]
accuracy = (sum(map(int, correct)) / float(len(correct)))
print('accuracy = {0}%'.format(accuracy * 100))

实现代码来自Part 4 - Multivariate Logistic Regression。具体可以查看我的github

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习算法总结--线性回归和逻辑回归 的相关文章

随机推荐

  • 数学建模常见模型算法归纳总结

    一 常见模型汇总 在数学建模中 根据具体问题的特点和要求 选择合适的模型和算法是非常重要的 同时需要根据实际情况进行调整和优化 以得到合理和可行的解决方案 二 数学建模四大模型 在数学建模中 通常将数学模型按照其应用目标和任务的不同划分为四
  • 如何重写equals方法

    重写equals方法 我们都知道 如果不对equals方法进行重写的话 那么它默认比较的就是两个对象的地址值是否是一样的 但是我们往往需要比较的是对象的内容是否是一样的 除了几个内置重写了equals方法的类型 我们写的bean一般都要自己
  • python网络爬虫方向的第三方库是_测验9: Python计算生态纵览 (第9周)

    测验9 Python计算生态纵览 第9周 单项选择题 1 以下选项不是Python数据可视化方向第三方库的是 A Matplotlib B Seaborn C Mayavi D Pyramid 正确答案 D Pyramid是Web开发框架库
  • Web自动化测试05:Selenium-CSS定位

    系列文章目录 软件测试功能到自动化学习路线图 2022年最新版技术栈 软件测试01 从了解测试岗位职能和测试流程开始 附作业 软件测试02 6大实际案例手把手教你设计测试点 软件测试03 用例执行以及缺陷管理的学习 附禅道下载使用流程 软件
  • 常用相机投影及畸变模型(针孔

    常用相机投影及畸变模型 1 背景 2 针孔相机投影模型及其畸变模型 2 1 缩略词和术语 2 1 世界坐标系到像素坐标系 2 2 针孔相机模型 2 2 1 世界坐标系到相机坐标系 2 2 2 相机坐标系到像素坐标系 2 3 综述 2 4 内
  • alook浏览器哪个好 夸克浏览器_简单搜索、X浏览器、夸克浏览器、Via几款极简浏览器,到底哪个最好用?...

    1 X浏览器 用过的都说X浏览器的广告拦截很强悍 大小 0 8M 无开屏页 只有安卓版本 用过 Chrome 的 都说X浏览器是好的备胎 无新闻 无推送 无后台 不足1M却小而强大 给你淋漓尽致的浏览体验 极简干净整洁的界面交互 无新闻 无
  • Android获取View宽高的几种方式

    有时我们会有基于这样的需求 当Activity创建时 需要获取某个View的宽高 然后进行相应的操作 但是我们在onCreate onStart中获取View的大小 获取到的值都是0 只是由于View的绘制工程还未完成 和在onCreate
  • 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串。

    问题描述 对于长度为5位的一个01串 每一位都可能是0或1 一共有32种可能 它们的前几个是 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串 输入格式 本试题没有输入 输出格式 输出32行
  • [极客大挑战 2019]RCE ME 1

    极客大挑战 2019 RCE ME 1 首先打开题目得到 发现是代码审计 传入的code不能大于40 并且不能包含a到z的大小写字符和1到10的数字 我们可以通过不在这个字符集里的字符进行绕过 可以采用异或和取反 这里我采用取反 绕过 执行
  • 如何画好『数据流图』和『业务流程图』

    前言 数据流图 Data Flow Diagram DFD 是一种便于用户理解和分析系统数据流程的图形工具 他摆脱了系统和具体内容 精确的在逻辑上描述系统的功能 输入 输出和数据存储等 是系统逻辑模型的重要组成部分 一 数据流图组成部分 数
  • (深度学习)Pytorch实现MLP并在MNIST数据集上验证

    Pytorch实现MLP并在MNIST数据集上验证 1 综述 2 MNIST数据集 3 代码细节说明 4 详细代码 综述 PyTorch实现MLP并在MNIST数据集上验证 是我所上的模式识别与深度学习课程的第一个实验 主要是给我们练练手熟
  • 进阶自动化测试,你一定要知道的...

    自动化测试指软件测试的自动化 在预设状态下运行应用程序或系统 预设条件包括正常和异常 最后评估运行结果 将人为驱动的测试行为转化为机器执行的过程 自动化测试框架一般可以分为两个层次 上层是管理整个自动化测试的开发 执行以及维护 在比较庞大的
  • 搭建LightPicture开源免费图床系统「公网远程控制」

    文章目录 1 前言 2 Lightpicture网站搭建 2 1 Lightpicture下载和安装 2 2 Lightpicture网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar云端设置 3 2 Cpo
  • 2021年漳州三中高考成绩查询,漳州高中学校实力排名,2021年漳州所有的高中分数线排名...

    2018年漳州市重点高中排名 排名学校名称人气所在市类型 1漳州三中1585漳州市省级示范高中 2漳浦道周中学1403漳州市省级示范高中 3诏安县第一中学1377漳州市省级示范高中 4福建省龙海第一中学1267漳州市省级示范高中 5福建省漳
  • Niginx

    基础 流程 分为正向代理和反向代理 在反向代理中 访问地址被nginx所拦截 而后 转发到其他位置 通过server进行处理 其中 server name和listen用来匹配服务器 不针对其后的具体路径 server匹配成功后 通过rew
  • linux ffmpeg开发环境搭建(基于ubuntu14.04和ffmpeg3.2)

    本文将介绍ffmpeg开发环境的安装测试和更新的步骤 基于ubuntu14 04和ffmpeg3 2 1 安装x264 1 libx264需要yasm 所以先安装yasm sudo apt get install yasm 2 安装libx
  • 修改jar包package目录结构操作方法

    开发中会遇到用第三方的jar包 有时候会出现不同的jar包 包名一致的情况 这就会引发运行时异常 找不到相应的jar包 这种问题时常困扰我们很长时间 下面提出一种解决办法 例如gson jar 1 新建一个文件夹 2 将要修改的jar包放到
  • 解读网易财报:游戏营收创新高,在线教育扬眉吐气?

    近期 不少中概股已相继对外发布新一季财报 5月18日 国内互联网巨头网易公布了2021年一季度业绩报告 从一季度的业绩表现而言 网易营收实现了新增长 超出市场及分析师的预期 在净利方面 摆脱了连续两个季度的负增长 亦超出分析师预期 受财报利
  • 读写.ini文件

    读写 ini文件 零 前言 一 写 二 读 总 零 前言 ini文件是程序的配置文件 它用来记录历史信息 界面信息 用户操作等 当然除了ini文件可以保存信息 其它文件也可以保存操作的 json txt csv等 如果数据比较少且读写不频繁
  • 机器学习算法总结--线性回归和逻辑回归

    1 线性回归 简述 在统计学中 线性回归 Linear Regression 是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析 这种函数是一个或多个称为回归系数的模型参数的线性组合 自变量都是一次