标签:boston 入门教程 算法 train test import 数据 理想国 sklearn
01.简介
概念
- 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
- 特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归
使用场景
- 房价预测
- 销售额度预测
- 贷款额度预测
02.入门案例
基本步骤
- 导入依赖
- 准备数据
- 数据基本处理
- 特征工程
- 机器学习
- 模型评估
示例:假设知道一组学生的平时成绩和期末考试成绩及最终成绩,现在有一个新的同学,知道他的平时成绩和期末考试成绩,那么他的期末最终成绩应该是多少?
'''
Author: 张大鹏
Date: 2020-12-18 20:17:02
LastEditTime: 2020-12-18 20:21:57
LastEditors: Please set LastEditors
Description: 线性回归入门案例
FilePath: \ai20201027\05.sklearn\01.line_demo01.py
'''
# 导入依赖
from sklearn.linear_model import LinearRegression
# 准备数据
# 成绩数据:第一列数据是期末考试分,第二列数据是平时表现分
x = [[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]]
# 期末最终成绩数据: k1 * 平时成绩 + k2 * 期末考试成绩
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
# 数据基本处理
# 特征工程
# 机器学习
estimator = LinearRegression() # 训练器
estimator.fit(x, y) #训练数据
print('系数: ', estimator.coef_) # 查看系数
print('预测(考试成绩100,平时成绩80):', estimator.predict([[100, 80]])) # 预测
# 模型评估
03.波斯顿房价预测(线性回归)
数据介绍
sklearn.model_selection.train_test_split(arrays, *options)
参数:
- x 数据集的特征值
- y 数据集的标签值
- test_size 测试集的大小,一般为float
- random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return
- x_train 训练集的特征值
- x_test 测试集的特征值
- y_train 训练集的目标值
- y_test 测试集的目标值
特征值和目标值的概念
- 特征值:数据的属性,比如鸢尾花的花瓣长度宽度,花萼长度宽度
- 目标值:分类的结果,比如鸢尾花的种类山鸢尾,虹膜锦葵,变色鸢尾
基本步骤
- 导入依赖
- 准备数据
- 分割数据
- 数据标准化
- 线性回归
- 获取预测值
- 计算均方误差
示例:训练预测波斯顿房价的模型
'''
Author: 张大鹏
Date: 2020-12-18 20:56:15
LastEditTime: 2020-12-18 21:08:37
LastEditors: Please set LastEditors
Description: 波斯顿房价预测
FilePath: \ai20201027\05.sklearn\boston_house_price_predict.py
'''
# 导入依赖
from scipy.sparse.construct import random
from sklearn.datasets import load_boston # 波斯顿房价数据
from sklearn.model_selection import train_test_split # 数据分割
from sklearn.preprocessing import StandardScaler # 数据标准化
from sklearn.linear_model import LinearRegression # 线性回归模型
from sklearn.metrics import mean_squared_error # 均方根误差
# 准备数据
boston = load_boston()
# 分割数据
# test_size = 0.2 训练集80 测试集20
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size = 0.2)
# 数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 线性回归
estimator = LinearRegression()
estimator.fit(x_train, y_train) # 传训练集
# print(x_train, y_train)
# 获取预测值
y_pre = estimator.predict(x_test)
print('预测值: ',y_pre)
# 计算均方误差
ret = mean_squared_error(y_test, y_pre)
print("均方误差:", ret) # 均方误差越小越好
输出结果
预测值: ...
均方误差: 20.857752704591284
04.波斯顿房价预测(随机梯度下降法)
概念
- 随机梯度下降法是对线性回归算法的一种优化
示例:使用随机梯度下降法训练波斯顿房价预测模型
基本步骤
- 导入依赖
- 准备数据
- 分割数据
- 数据标准化
- 随机梯度下降算法训练模型
- 获取预测值
- 获取均方根误差(越小越好)
源码
'''
Author: 张大鹏
Date: 2020-12-18 21:13:46
LastEditTime: 2020-12-18 21:27:39
LastEditors: Please set LastEditors
Description: 随机梯度下降算法预测波斯顿房价
FilePath: \ai20201027\05.sklearn\boston_house_price_predict_sgd.py
'''
# 导入依赖
from sklearn.datasets import load_boston # 波斯顿房价
from sklearn.model_selection import train_test_split # 数据分割
from sklearn.preprocessing import StandardScaler # 数据标准化
from sklearn.linear_model import SGDRegressor # 随机梯度下降算法
from sklearn.metrics import mean_squared_error # 均方根误差
# 准备数据
boston = load_boston()
# 分割数据
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2)
# 数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 随机梯度下降算法训练模型
estimator = SGDRegressor(max_iter=1000)
estimator.fit(x_train, y_train)
# 获取预测值
y_pre = estimator.predict(x_test)
# print("预测值:", y_pre)
# 获取均方根误差(越小越好)
ret = mean_squared_error(y_test, y_pre)
print("均方根误差:", ret)
输出结果
均方根误差: 20.768660251082974
05.过拟合和欠拟合
概念
- 过拟合:
- 一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。
- 模型过于复杂
- 在训练集表现好,在测试集表现不好
- 欠拟合:
- 一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。
- 模型过于简单
- 在训练集和测试集都表现不好
原因以及解决办法
- 欠拟合原因以及解决办法
- 原因:学习到数据的特征过少
- 解决办法:
- 1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
- 2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
- 过拟合原因以及解决办法
- 原因:原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型尝试去兼顾各个测试数据点
- 解决办法:
- 1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
- 2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
- 3)正则化
- 4)减少特征维度,防止维灾难
06.正则化线性模型
常用
- Ridge Regression 岭回归
- Lasso 回归
- Elastic Net 弹性网络
- Early stopping
导入
from sklearn.linear_model import Ridge, ElasticNet, Lasso
常用:岭回归
sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)
- 具有l2正则化的线性回归
- alpha:正则化力度,也叫 λ
- λ取值:0~1 1~10
- solver:
- auto:会根据数据自动选择优化方法
- sag:如果数据集、特征都比较大,选择该随机梯度下降优化
- normalize:数据是否进行标准化
- normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据
属性
Ridge.coef_:回归权重
Ridge.intercept_:回归偏置
示例:使用岭回归模型预测波斯顿房价
基本步骤
- 导入依赖
- 准备数据
- 分割数据
- 数据标准化
- 岭回归训练模型
- 获取预测值
- 获取均方根误差
源码
'''
Author: 张大鹏
Date: 2020-12-18 22:02:03
LastEditTime: 2020-12-18 22:08:28
LastEditors: Please set LastEditors
Description: 使用岭回归模型预测波士顿房价
FilePath: \ai20201027\05.sklearn\boston_house_price_predict_ridge.py
'''
# 导入依赖
from sklearn.datasets import load_boston # 波斯顿房价
from sklearn.model_selection import train_test_split # 数据切割
from sklearn.preprocessing import StandardScaler # 数据标准化
from sklearn.linear_model import Ridge # 岭回归模型
from sklearn.metrics import mean_squared_error # 均方根误差
# 准备数据
boston = load_boston()
# 分割数据
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2)
# 数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 岭回归训练模型
estimator = Ridge(alpha=5)
estimator.fit(x_train, y_train)
# 获取预测值
y_pre = estimator.predict(x_test)
# 获取均方根误差
ret = mean_squared_error(y_test, y_pre)
print("均方根误差:",ret)
输出结果
均方根误差: 16.635488680564062
07.模型的保存和加载
from sklearn.externals import joblib
# 保存
joblib.dump(estimator, 'test.pkl')
# 加载
estimator = joblib.load('test.pkl')
标签:boston,入门教程,算法,train,test,import,数据,理想国,sklearn 来源: https://blog.csdn.net/qq_37703224/article/details/111397485
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。