机器学习--线性回归练习--FirstChapter

线性回归

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False

def input_model(low,high,step):
    x = np.arange(low,high,step)
    return x

def y_label_(k,x):
    y_label_ = k*x + np.random.randn(len(x))*0.2
    return y_label_

def linear_model(k_,x):
    y_hat = k_* x
    return y_hat

def loss_model(y_hat,y_label):
    loss  = 1/(2*len(y_hat))*np.sum((y_hat-y_label)**2)
    return loss

if __name__ =="__main__":
    x = input_model(0,20,1)
    y_label =  y_label_(1,x)
    num = eval(input("请输入模拟次数:"))
    k = np.tile(num,(num,1))
    start ,end = k.reshape(2,-1).shape[0],k.reshape(2,-1).shape[1]
    m = k//2
    j = 1
    loss_ = []
    theta = []
    plt.figure(figsize=(12, 8))
    plt.style.use("ggplot")
    for i in range(-num//2,round(num/2)):
        y_hat = linear_model(i,x)
        theta.append(i)
        loss = loss_model(y_hat,y_label)
        loss_.append(loss)
        plt.subplot(start,end,j)
        plt.scatter(x,y_label)
        plt.plot(x,y_hat,linewidth = 1,label = "k={}".format(i))
        plt.legend(loc=0)
        x_min,x_max = x.min(),x.max()
        y_min,y_max = np.min((y_label.min(),y_hat.min()))-5,\
                      np.max((y_label.max(),y_hat.max()))+5
        plt.xlim([x_min,x_max])
        plt.ylim([y_min,y_max])
        plt.locator_params("y", nbins=10)
        plt.locator_params("x", nbins=10)
        plt.xlabel("x", fontsize=15)
        plt.ylabel("y", fontsize=15)
        j += 1
    plt.show()
    plt.figure(figsize=(12, 8))
    plt.plot(theta,loss_,label = "不同斜率k值下损失函数的值")
    plt.legend(loc=0)
    plt.locator_params("y", nbins=10)
    plt.locator_params("x", nbins=10)
    plt.xlabel("k", fontsize=15)
    plt.ylabel("loss", fontsize=15)
    plt.show()

机器学习--线性回归练习--FirstChapter_第1张图片

机器学习--线性回归练习--FirstChapter_第2张图片
数据分布符合 y = x,
拟合方程为 y= kx
k取不同的值,可看到,预测值与实际值之间的偏差不同,其中k=1时,loss损失最小,基本为0,则确定此数据的预测模型为y = x

你可能感兴趣的:(python,机器学习)