python机器学习

您所在的位置:网站首页 spss线性回归方程公式怎么套的 python机器学习

python机器学习

2023-06-29 13:30| 来源: 网络整理| 查看: 265

目录 回归模型评价方法【回归】线性回归模型1.线性模型2.线性回归3.损失函数(误差大小)4.解决方法1) 最小二乘法之正规方程2) 最小二乘法之梯度下降 5.代码实现5+.模型保存与加载6.特点 实例:波士顿房价【回归】带有L2正则化的岭回归

回归模型评价方法

在这里插入图片描述在这里插入图片描述 在这里插入图片描述

from sklearn.metrics import explained_variance_score,\ mean_absolute_error,\ mean_squared_error,\ median_absolute_error,r2_score print('Boston数据线性回归模型的平均绝对误差为:', mean_absolute_error(y_test,y_pred)) print('Boston数据线性回归模型的均方误差为:', mean_squared_error(y_test,y_pred)) print('Boston数据线性回归模型的中值绝对误差为:', median_absolute_error(y_test,y_pred)) print('Boston数据线性回归模型的可解释方差值为:', explained_variance_score(y_test,y_pred)) print('Boston数据线性回归模型的R方值为:', r2_score(y_test,y_pred))

在这里插入图片描述

【回归】线性回归模型 1.线性模型

在这里插入图片描述

2.线性回归

定义:线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合 在这里插入图片描述

3.损失函数(误差大小)

在这里插入图片描述

4.解决方法 1) 最小二乘法之正规方程

在这里插入图片描述

2) 最小二乘法之梯度下降

在这里插入图片描述 在这里插入图片描述

5.代码实现

正规方程:

sklearn.linear_model.LinearRegression()

梯度下降:

sklearn.linear_model.SGDRegressor()

在这里插入图片描述

5+.模型保存与加载 from sklearn.externals import joblib # 保存训练好的模型 joblib.dump(lr, "./test.pkl") # # 预测房价结果 model = joblib.load("./test.pkl") y_predict = std_y.inverse_transform(model.predict(x_test)) print("保存的模型预测的结果:", y_predict) 6.特点

特点:线性回归器是最为简单、易用的回归模型。

从某种程度上限制了使用,尽管如此,在不知道特征之间关系的前提下,我们仍然使用线性回归器作为大多数系统的首要选择。

小规模数据:LinearRegression(不能解决拟合问题)以及其它大规模数据:SGDRegressor

实例:波士顿房价

在这里插入图片描述 在这里插入图片描述 模型训练:

from sklearn.datasets import load_boston from sklearn.linear_model import LinearRegression,SGDClassifier from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error, classification_report import numpy as np def myliner(): ''' 线性回归直接预测房子价格 :return:None ''' #分隔数据集 lb=load_boston() x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25) # print(x_train,x_test) #标准化处理 # 特征工程(标准化) std = StandardScaler() # 对测试集和训练集的特征值进行标准化 # 目标值也需要标准化处理!!!!实例化两个标准化API std_x = StandardScaler() x_train = std_x.fit_transform(x_train) x_test = std_x.transform(x_test) #目标值 std_y = StandardScaler() y_train = std_y.fit_transform(y_train.reshape(-1,1))#要求数据是二维数据 y_test = std_y.transform(y_test.reshape(-1,1)) ########################################### # 正规方程 lr = LinearRegression() lr.fit(x_train, y_train) print("正规方程的回归系数",lr.coef_)#得到的回归系数 # 保存训练好的模型 from sklearn.externals import joblib joblib.dump(lr, "./test.pkl") # 预测测试集的房子价格#逆操作,逆标准化 y_lr_predict = std_y.inverse_transform(lr.predict(x_test)) # print("正规方程测试集里面每个房子的预测价格:", y_lr_predict) print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict)) ############################### # # #梯度下降 std_x1 = StandardScaler() x_train1 = std_x1.fit_transform(x_train) x_test1 = std_x1.transform(x_test) # 目标值 std_y1 = StandardScaler() y_train1 = std_y1.fit_transform(y_train.reshape(-1, 1)) # 要求数据是二维数据 y_test1 = std_y1.transform(y_test.reshape(-1, 1)) y_train = y_train1.astype("int") x_train = x_train1.astype("int") sgd = SGDClassifier() sgd.fit(x_train, y_train) print("梯度下降得到的回归系数",sgd.coef_) # 得到的回归系数 # 保存训练好的模型 from sklearn.externals import joblib joblib.dump(sgd, "./test.pkl") # 预测测试集的房子价格 # y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test)) # 逆操作,逆标准化 # print("梯度下降测试集里面每个房子的预测价格:", y_sgd_predict) # print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict)) if __name__ == '__main__': myliner()

进行预测

from sklearn.linear_model import LinearRegression from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split ## 加载boston数据 boston = load_boston() X = boston['data'] y = boston['target'] names = boston['feature_names'] ## 将数据划分为训练集测试集 X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state=125) ## 建立线性回归模型 clf = LinearRegression().fit(X_train,y_train) print('建立的LinearRegression模型为:','\n',clf) ## 预测训练集结果 y_pred = clf.predict(X_test) print('预测前20个结果为:','\n',y_pred[:20]) # 代码 6-25 import matplotlib.pyplot as plt from matplotlib import rcParams rcParams['font.sans-serif'] = 'SimHei' fig = plt.figure(figsize=(10,6)) ##设定空白画布,并制定大小 ##用不同的颜色表示不同数据 plt.plot(range(y_test.shape[0]),y_test,color="blue", linewidth=1.5, linestyle="-") plt.plot(range(y_test.shape[0]),y_pred,color="red", linewidth=1.5, linestyle="-.") plt.legend(['真实值','预测值']) #plt.savefig('../tmp/聚类结果.png') plt.show() ##显示图片 【回归】带有L2正则化的岭回归

在这里插入图片描述 在这里插入图片描述在这里插入图片描述正则化系数越大,权重趋近于0,模型越来越简单。

线性回归 LinearRegression与Ridge对比

在这里插入图片描述

from sklearn.datasets import load_boston from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, LogisticRegression from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error, classification_report from sklearn.externals import joblib import pandas as pd import numpy as np def rd(): """ 线性回归直接预测房子价格 :return: None """ # 获取数据 lb = load_boston() # 分割数据集到训练集和测试集 x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25) print(y_train, y_test) # 进行标准化处理(?) 目标值处理? # 特征值和目标值是都必须进行标准化处理, 实例化两个标准化API std_x = StandardScaler() x_train = std_x.fit_transform(x_train) x_test = std_x.transform(x_test) # 目标值 std_y = StandardScaler() y_train = std_y.fit_transform(y_train.reshape(-1, 1)) y_test = std_y.transform(y_test.reshape(-1, 1)) # # 预测房价结果 # model = joblib.load("./tmp/test.pkl") # y_predict = std_y.inverse_transform(model.predict(x_test)) # print("保存的模型预测的结果:", y_predict) # # estimator预测 # 正规方程求解方式预测结果 lr = LinearRegression() lr.fit(x_train, y_train) print(lr.coef_) # 保存训练好的模型 # joblib.dump(lr, "./tmp/test.pkl") # 预测测试集的房子价格 y_lr_predict = std_y.inverse_transform(lr.predict(x_test)) print("正规方程测试集里面每个房子的预测价格:", y_lr_predict) print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict)) # 梯度下降去进行房价预测 sgd = SGDRegressor() sgd.fit(x_train, y_train) print(sgd.coef_) # 预测测试集的房子价格 y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test)) print("梯度下降测试集里面每个房子的预测价格:", y_sgd_predict) print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict)) # 岭回归去进行房价预测 rd = Ridge(alpha=1.0) rd.fit(x_train, y_train) print(rd.coef_) # 预测测试集的房子价格 y_rd_predict = std_y.inverse_transform(rd.predict(x_test)) print("岭回归测试集里面每个房子的预测价格:", y_rd_predict) print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict)) return None if __name__ == '__main__': rd()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3