JavaScript is required

2026-01-07-机器学习相关笔记

笔记#机器学习#算法#Python

评估方法(留出法)

python
import random
import numpy as np

def train_test_split(X,test_size=0.2,random_state=5):
    random.seed(random_state)
    n_samples = len(X)
    indices = np.arange(n_samples)
    train_indexs = list(set(random.sample(indices.tolist(),int(n_samples*(1-test_size)))))
    test_indexs = [k for k in indices if k not in train_indexs]
    return X[train_indexs],X[test_indexs]


test_size = 0.2
X = np.array([1,2,3,4,5,6,7,8,9,10])
train_X,test_X = train_test_split(X,test_size=test_size)
print(train_X,test_X)

print("debug_begin");
print(len(test_X) == int(len(X)*test_size))
print("debug_end");

评估方法(交叉验证法)

优化算法-梯度下降法 1

python
import math
print("debug_begin");
def func_1d_test1(x):
    return x**2+1
def grad_1d_test1(x):
    return x*2

def func_1d_test2(x):
    return x**2 - 4*x +14
def grad_1d_test2(x):
    return x*2-4
print("debug_end");


def gradient_descent_1d(grad, cur_x=0.1, learning_rate=0.01, precision=0.0001, max_iters=10000):
    for i in range(max_iters):
        grad_cur = grad(cur_x)
        if abs(grad_cur) < precision:
            break  # 当梯度趋近为 0 时,视为收敛
        cur_x = cur_x - grad_cur * learning_rate

    return cur_x

print("debug_begin");
def test():
    print("%.7f" %gradient_descent_1d(grad_1d_test1, cur_x=10, learning_rate=0.2, precision=0.0001, max_iters=10000))
    print("%.7f" %gradient_descent_1d(grad_1d_test2, cur_x=10, learning_rate=0.2, precision=0.0001, max_iters=10000))
print("debug_end");

test()

优化算法-梯度下降法 2

线性回归-糖尿病预测

逻辑回归-乳腺癌预测

svm-手写数字识别

svm-梯度下降实现 SVM 多分类问题