机器学习01
dataset.py
from matplotlib import pyplot as plt
import dataset# 权重参数 (可调整)
w = 0.6# 学习率 防止模型图形变化幅度过大,模型(直线)在二维坐标系中上下摆动过大,导致无法实现与实际数据模型拟合 (可调整)
n = 0.5# 获取数据20个样本, xs 和 ys 是一个数组
xs, ys = dataset.get_beans(20)# 训练20个样本拓展2000个样本
for i in range(100):for i in range(20):# 获取一个样本x = xs[i]y = ys[i]# 毒性预测模型y_pre = w * x# 误差 = 实际值 - 预测值e = y - y_pre# 根据误差和学习调整权重参数 (Rosenblatt 感知器算法) 核心功能:就是通过调整w 让这条模型直线尽可能落在坐标系上的点w = w + (n * e * x)# 使用训练完后的w组成模型(函数)进行预测
y_pre = w * xs# 绘图
plt.scatter(xs, ys, label="Data")
plt.plot(xs, y_pre, color='red', label=f"Prediction (w={w})")
plt.title("Size-Toxicity Prediction")
plt.xlabel("Bean Size")
plt.ylabel("Toxicity")
plt.legend()
plt.show()
import numpy as npdef get_beans(n=100):# 生成 [0.0, 1.0) 区间的随机数,加上极小值避免为 0xs = np.random.rand(n)xs = np.clip(xs, 1e-10, None) # 确保所有值 > 0# 构造近似线性关系 y ≈ 0.8 * x + 0.1,并加一点噪声noise = np.random.uniform(-0.05, 0.05, size=n)ys = 0.8 * xs + 0.1 + noiseys = np.clip(ys, 1e-10, 1.0) # 确保所有值在 (0, 1] 范围内return xs, ys