从0实现线性回归
创始人
2024-01-21 02:13:37

编码题:

按要求完成下面的内容

1请用python完成从0实现线性回归,尝试使用不同的训练参数(学习率,迭代次数), 以及不同的评价方法(MSE,MAE,RMSE,R2)等。

2比较说明sklearn的线性模型和自己实现的线性模型(通过上述代码实现以及训练过程, 比较不同超参数以及评价方法的影响)

第一问:

首先从0开始实现线性回归

1)创建数据

        直接调用load_boston 加载波士顿房价数据集:

2)5种评价指标:

3)自定义模型:

 4)定义损失函数:

5)修改参数进行比较结果如下:

 

6)损失函图:

第二问:在第一问的基础上直接调用sklearn 里面的 LinearRegression()模型即可, 然后在进行比较,改变参数进行比较

结果如下:

根据结果比较得到结论:

  1. b(前进的距离)小一点的话,每次改变的变化就小一点,精准度会比较高一点,适合训练次数比较多的模型,反之则反之
  2. Alpha (学习率)这个值笼统来讲及时比较大的时候学习效果就比较明显,对于b的调整也会比较明显从这里很容易看出:

代码部分:from sklearn.datasets import load_bostonfrom sklearn.linear_model import LinearRegressionimport numpy as npimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings("ignore")  # 忽略警告运行# 数据的加载def feature_scalling(X):mean = X.mean(axis=0)std = X.std(axis=0)return (X - mean) / stddef load_data():data = load_boston()  # 注意波士顿房价这个数据将会在skleran 1.2这个版本移除X = data.datay = data.target.reshape(-1, 1)X = feature_scalling(X)return X, y# 评价指标1 ——  均方误差(MSE)def MSE(y, y_pre):return np.mean((y - y_pre) ** 2)# 评价指标2 ——  均方根误差(RMSE)def RMSE(y, y_pre):return np.sqrt(MSE(y, y_pre))# 评价指标3 —— 平均绝对误差(MAE)def MAE(y, y_pre):return np.mean(np.abs(y-y_pre))# 评价指标4 —— 平均绝对百分比误差(MAPE)def MAPE(y, y_pre):return np.mean(np.abs(y-y_pre)/y)# 评价指标4 —— R^2 评价指标def R2(y, y_pre):u = np.sum((y-y_pre)**2)v = np.sum((y-np.mean(y_pre))**2)return 1-(u/v)# 预测函数def prediction(X, W, bias):return np.matmul(X, W) + bias# 损失值函数def cost_function(X, y, W, bias):m, n = X.shapey_hat = prediction(X, W, bias)return 0.5 * (1 / m) * np.sum((y - y_hat) ** 2)# 自定义模型调整值def gradient_descent(X, y, W, bias, alpha):m, n = X.shape  # m个数据y_hat = prediction(X, W, bias)grad_w = -(1 / m) * np.matmul(X.T, (y - y_hat))grad_b = -(1 / m) * np.sum(y - y_hat)  # 求解梯度W = W - alpha * grad_w  # 梯度下降bias = bias - alpha * grad_b  # 调整前进的距离return W, bias# 自定义模型 1'''b = 0.1 #前进的距离alpha = 0.2 #学习率'''def train_by_my1(X, y, ite=200):m, n = X.shape  # 506,13W = np.random.randn(n, 1)b = 0.1  # 前进的距离alpha = 0.2  # 学习率costs = []  # 每一次的损失函数for i in range(ite):  # 训练 ite = 200 轮J = cost_function(X, y, W, b)  # 计算损失值costs.append(J)W, b = gradient_descent(X, y, W, b, alpha)y_pre = prediction(X, W, b)print("----------my_train1 训练模型--------------")print("my_train1 MSE评价指标: ", MSE(y, y_pre))print("my_train1 R^2评价指标: ", R2(y, y_pre))print("my_train1 MAPE评价指标: ", MAPE(y, y_pre))print("my_trian1 RMSE评价指标: ", RMSE(y, y_pre))print("my_train1 MAE评价指标; ", MAE(y, y_pre))return costs# 自定义模型超参数修改2'''b = 0.2 #前进的距离alpha = 0.5 #学习率'''def train_by_my2(X, y, ite=200):m, n = X.shape  # 506,13W = np.random.randn(n, 1)b = 0.05  # 前进的距离alpha = 0.1  # 学习率costs = []  # 每一次的损失函数for i in range(ite):  # 训练 ite = 200 轮J = cost_function(X, y, W, b)  # 计算损失值costs.append(J)W, b = gradient_descent(X, y, W, b, alpha)y_pre = prediction(X, W, b)print("----------my_train2 训练模型--------------")print("my_train2 MSE评价指标: ", MSE(y, y_pre))print("my_train2 R^2评价指标: ", R2(y, y_pre))print("my_train2 MAPE评价指标: ", MAPE(y, y_pre))print("my_trian2 RMSE评价指标: ", RMSE(y, y_pre))print("my_train2 MAE评价指标; ", MAE(y, y_pre))return costs# skleran 训练模型def train_by_sklearn(x, y):model = LinearRegression()  # 创建模型model.fit(x, y)  # fit训练模型y_pre = model.predict(x)  # 根据模型预测print("----------skleran 训练模型--------------")print("sklearn_train MSE评价指标: ", MSE(y, y_pre))print("sklearn_train R^2评价指标: ", R2(y, y_pre))print("sklearn_train MAPE评价指标: ", MAPE(y, y_pre))print("sklearn_train RMSE评价指标: ", RMSE(y, y_pre))print("sklearn_train MAE评价指标; ", MAE(y, y_pre))if __name__ == '__main__':x, y = load_data()#     train_by_sklearn(x, y)costs = train_by_my1(x, y)train_by_my2(x, y)plt.plot(range(len(costs)), costs, label='损失值', c='black')plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体plt.legend(fontsize=15)plt.xlabel('迭代次数', fontsize=15)plt.tight_layout()  # 调整子图间距plt.show()

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
进口奶粉的排名 荷兰奶粉十大排... 越来越乱的国内奶粉市场让很多宝妈宝爸都不知道该如何选择奶粉品牌,宝宝的安全是第一位,奶粉的质量以及口...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
不用扬鞭自奋蹄 乘势而上千帆竞... 思明区正全力向“两个进位”目标发起冲刺,努力为建设高素质高颜值现代化国际化的厦门作出“思明贡献”。(...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...