杭州做网站制作,微信多开软件商城,wordpress干什么用的,图片比较多的网站怎么做#x1f308;#x1f308;#x1f308;机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 机器学习实战-系列教程1#xff1a;线性回归入门教程 机器学习实战-系列教程2#xff1a;线性回归1 机器学习实战-系列教程3机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 机器学习实战-系列教程1线性回归入门教程 机器学习实战-系列教程2线性回归1 机器学习实战-系列教程3线性回归2
1、整体流程简介
拿到数据data数据预处理操作归一化、标准化怎么样的x和k组合能够更加准确的拟合出真实值使用梯度下降算法GDGradient Descent通过GD让loss和k之间达到一个收敛关系这个过程Scikit-learn自动帮我们完成完成梯度下降算法就可以把线性回归算出来了。单个特征和多个特征做对比在代码中实现出来
2、初始化操作
初始化函数就是将数据处理成机器学习所需要格式与范围并且把每一个数据都对应好标签标签也就是真实值并且将数据分为训练集、验证集、测试集等具体根据任务设定
import numpy as np
from utils.features import prepare_for_training
class LinearRegression:def __init__(self,data,labels,polynomial_degree 0,sinusoid_degree 0,normalize_dataTrue):(data_processed, features_mean, features_deviation) prepare_for_training(data, polynomial_degree, sinusoid_degree,normalize_dataTrue)self.data data_processedself.labels labelsself.features_mean features_meanself.features_deviation features_deviationself.polynomial_degree polynomial_degreeself.sinusoid_degree sinusoid_degreeself.normalize_data normalize_datanum_features self.data.shape[1]self.theta np.zeros((num_features,1))导包定义一个线性回归类初始化函数定义初始化操作需要传进来等下需要用到的一些值数据、标签、多项式特征的最高次数、非线性变换、预处理经过预处理操作把定义好的数据拿过来python特有的self.data.shape[1]表示数据有多少列num_features即特征个数theta就是k有多少个一个特征对应一个k
3、训练
3.1 预测函数
staticmethod
def hypothesis(data,theta): predictions np.dot(data,theta)return predictions预测函数是将原始数据data与权重参数theta进行矩阵的点乘形成的计算结果第一次计算时theta是随机产生的可以自己设置成满足正态分布等
3.2 参数更新函数
def gradient_step(self,alpha): num_examples self.data.shape[0]prediction LinearRegression.hypothesis(self.data,self.theta)delta prediction - self.labelstheta self.thetatheta theta - alpha*(1/num_examples)*(np.dot(delta.T,self.data)).Tself.theta thetanum_examples样本个数data.shape[0]是行数data.shape[1]列数prediction预测值得到预测值用线性回归LinearRegression类调用预测函数hypothesis将参数和原始数据穿进去delta 预测值减去真实值 δ d e l t a ( h θ ( x k ) − y k ) δdelta (h_θ(x^k)-y^k) δdelta(hθ(xk)−yk)theta 训练得到参数 θ 1 θ_1 θ1对应的是 x 1 x_1 x1以此类推 theta 更新公式 θ j θ j − α 1 10 ∑ k i i 9 δ x j k θ_j θ_j - α\frac{1}{10}\sum_{ki}^{i9}δx_j^k θjθj−α101ki∑i9δxjkself.theta theta返回更新的参数
参数更新函数就是调用了预测函数计算delta 按照参数更新公式更新参数theta
3.3 损失函数
def cost_function(self,data,labels):损失计算方法num_examples data.shape[0]delta LinearRegression.hypothesis(self.data,self.theta) - labelscost (1/2)*np.dot(delta.T,delta)/num_examplesreturn cost[0][0]损失函数就是计算出预测值和真实之间的差异大小的函数。 损失不会是多少样本就计算多少损失是计算每次平均的损失 num_examples 样本个数 delta 就是预测值减去真实值 cost 就是计算delta 每个差值的平方再除以2再除以样本个数
3.4 梯度下降函数
def gradient_descent(self,alpha,num_iterations):cost_history []for _ in range(num_iterations):self.gradient_step(alpha)cost_history.append(self.cost_function(self.data,self.labels))return cost_history梯度下降函数实际上就是将参数更新函数和损失函数执行多次因为将所有的数据都会训练一次每一次的批量都会执行一次参数更新每次更新的同时也会记录损失。 cost_history 可以将每次的损失记录下来cost_function可以计算出损失通过原始数据得到预测值在和真实值之间做差别计算 。
3.5训练函数
def train(self,alpha,num_iterations 500):cost_history self.gradient_descent(alpha,num_iterations)return self.theta,cost_historyalpha学习率 num_iterations 迭代次数 cost_history保存的所有损失值
训练函数调用梯度下降函数返回损失定义迭代次数一次迭代就是将整个数据集完全训练一次
4、测试
测试集也需要自己的计算损失和进行预测的函数测试集就不参与训练和参数更新了
4.1 获取当前损失
def get_cost(self,data,labels): data_processed prepare_for_training(data,self.polynomial_degree,self.sinusoid_degree,self.normalize_data)[0]return self.cost_function(data_processed,labels)prepare_for_training是数据预处理函数 cost_function是损失计算的函数
4.2 测试集预测函数
def predict(self,data):用训练的参数模型与预测得到回归值结果data_processed prepare_for_training(data,self.polynomial_degree,self.sinusoid_degree,self.normalize_data)[0]predictions LinearRegression.hypothesis(data_processed,self.theta)return predictions先是预处理数据再把处理后的数据和theta传进预测函数就可以得到预测结果了这里专门在测试过程中实现的。
机器学习实战-系列教程1线性回归入门教程 机器学习实战-系列教程2线性回归1 机器学习实战-系列教程3线性回归2