没有合适的资源?快使用搜索试试~ 我知道了~
首页Python数据分析--Kaggle共享单车项目实战
Python数据分析--Kaggle共享单车项目实战
5星 · 超过95%的资源 32 下载量 123 浏览量
更新于2023-03-03
评论 12
收藏 1010KB PDF 举报
添加正则化项,是指在损失函数上添加正则化项,而正则化项可分为两种:一种是L1正则化项,另一种是L2正则化.我们把带有L2正则化项的回归模型称为岭回归,带有L1正则化项的回归称为Lasso回归.1.岭回归引用百度百科定义.岭回归(英文名:ridgeregression,Tikhonovregularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。通过定义可以看出,岭回归是改良后的最小二乘法,是有偏估计的回归方法,即
资源详情
资源评论
资源推荐
Python数据分析数据分析--Kaggle共享单车项目实战共享单车项目实战
正文
添加正则化项, 是指在损失函数上添加正则化项, 而正则化项可分为两种: 一种是L1正则化项, 另一种是L2正则化. 我们把带有L2
正则化项的回归模型称为岭回归, 带有L1正则化项的回归称为Lasso回归.
1. 岭回归
引用百度百科定义.
岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种
改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可
靠的回归方法,对病态数据的拟合要强于最小二乘法。
通过定义可以看出, 岭回归是改良后的最小二乘法, 是有偏估计的回归方法, 即给损失函数加上一个正则化项, 也叫惩罚项(L2范
数), 那么岭回归的损失函数表示为
其中, m是样本量, n是特征数, 是惩罚项参数(其取值大于0), 加惩罚项主要为了让模型参数的取值不能过大. 当趋于无穷大时, 对
应趋向于0, 而表示的是因变量随着某一自变量改变一个单位而变化的数值(假设其他自变量均保持不变), 这时, 自变量之间的共
线性对因变量的影响几乎不存在, 故其能有效解决自变量之间的多重共线性问题, 同时也能防止过拟合.
2. Lasso回归
岭回归的正则化项是对求平方和, 既然能求平方也就能取绝对值, 而Lasso回归的L1范数正是对取绝对值, 故其损失函数可以表
示为
当只有两个自变量时, L1范数在二维上对应的图形是矩形(顶点均在坐标轴上, 即其中一个回归系数为0), 对于这样的矩形来说其
顶点更容易与同心椭圆(等值线)相交, 而相交的点则为最小损失函数的最优解. 也就是说Lasso会出现回归系数为0的情况. 对于
L2范数来说则是圆形,其不会相交于坐标轴上的点, 自然也就不会出现回归系数为0的情况. 当然多个自变量也是同样的道理
3. 岭回归和Lasso回归对比
相同点:
1. 岭回归和Lasso回归均是加了正则化项的线性回归模型, 本质上它们都是线性回归模型.
2. 两者均能在一定程度上解决多重共线性问题, 并且可以有效避免过拟合.
3. 回归系数均受正则化参数的影响, 均可以用图形表示回归系数和正则化参数的关系, 并可以通过该图形进行变量以及正则化
参数的筛选.
不同点:
1. 岭回归的回归系数均不为0, Lasso回归部分回归系数为0.
4. 实际案例应用
1. 数据来源及数据背景
数据来源: https://www.kaggle.com/c/bike-sharing-demand/data, 数据有训练集和测试集, 在训练集中包含10886个样本以及12
个字段, 通过训练集上自行车租赁数据对美国华盛顿自行车租赁需求进行预测.
2. 数据概览
1. 读取数据
import pandas as pd
df = pd.read_csv(r'D:\Data\bike.csv')
pd.set_option('display.max_rows',4 )
df
通过以上可以得知数据维度10886行X12列, 除了第一列其它均显示为数值, 具体的格式还要进一步查看, 对于各列的解释也放入
下一环节.
2. 查看数据整体信息
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10886 entries, 0 to 10885
Data columns (total 12 columns):
datetime 10886 non-null object #时间和日期
season 10886 non-null int64 #季节, 1 =春季,2 =夏季,3 =秋季,4 =冬
季
holiday 10886 non-null int64 #是否是假期, 1=是, 0=否
workingday 10886 non-null int64 #是否是工作日, 1=是, 0=否
weather 10886 non-null int64 #天气,1:晴朗,很少有云,部分多云,部分
多云; 2:雾+多云,雾+碎云,雾+少云,雾; 3:小雪,小雨+雷雨+散云,小
雨+散云; 4:大雨+冰块+雷暴+雾,雪+雾temp 10886 non-null float64 #温
度atemp 10886 non-null float64 #体感温度humidity 10886 non-null int64
#相对湿度windspeed 10886 non-null float64 #风速casual 10886 non-null
int64 #未注册用户租赁数量registered 10886 non-null int64 #注册用户租
赁数量count 10886 non-null int64 #所有用户租赁总数dtypes: float64(3),
int64(8), object(1) memory usage: 1020.6+ KB
除了datetime为字符串型, 其他均为数值型, 且无缺失值.
3. 描述性统计
df.describe()
温度, 体表温度, 相对湿度, 风速均近似对称分布, 而非注册用户, 注册用户,以及总数均右边分布.
4. 偏态, 峰态
for i in range(5, 12):
name = df.columns[i]
print('{0}偏态系数为 {1}, 峰态系数为 {2}'.format(name, df[name].skew(),
df[name].kurt()))
temp偏态系数为 0.003690844422472008, 峰态系数为 -
0.9145302637630794
atemp偏态系数为 -0.10255951346908665, 峰态系数为 -
0.8500756471754651
humidity偏态系数为 -0.08633518364548581, 峰态系数为 -
0.7598175375208864
windspeed偏态系数为 0.5887665265853944, 峰态系数为
0.6301328693364932
casual偏态系数为 2.4957483979812567, 峰态系数为
7.551629305632764
registered偏态系数为 1.5248045868182296, 峰态系数为
2.6260809999210672
count偏态系数为 1.2420662117180776, 峰态系数为
1.3000929518398334
temp, atemp, humidity低度偏态, windspeed中度偏态, casual, registered, count高度偏态
temp, atemp, humidity为平峰分布, windspeed,casual, registered, count为尖峰分布.
3. 数据预处理
由于没有缺失值, 不用处理缺失值, 看看有没有重复值.
1. 检查重复值
print('未去重: ', df.shape)
print('去重: ', df.drop_duplicates().shape)
未去重: (10886, 12)
去重: (10886, 12)
没有重复项, 看看异常值.
2. 异常值
通过箱线图查看异常值
import seaborn as sns
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 6))
#绘制箱线图
sns.boxplot(x="windspeed", data=df,ax=axes[0][0])
sns.boxplot(x='casual', data=df, ax=axes[0][1])
sns.boxplot(x='registered', data=df, ax=axes[1][0])
sns.boxplot(x='count', data=df, ax=axes[1][1])
plt.show()
租赁数量会受小时的影响, 比如说上班高峰期等, 故在这里先不处理异常值.
3. 数据加工
#转换格式, 并提取出小时, 星期几, 月份
df['datetime'] = pd.to_datetime(df['datetime'])
df['hour'] = df.datetime.dt.hour
df['week'] = df.datetime.dt.dayofweek
df['month'] = df.datetime.dt.month
df['year_month'] = df.datetime.dt.strftime('%Y-%m')
df['date'] = df.datetime.dt.date
#删除datetime
df.drop('datetime', axis = 1, inplace = True)
df
4. 特征分析
1) 日期和总租赁数量
import matplotlib
#设置中文字体
font = {'family': 'SimHei'}
matplotlib.rc('font', **font)
#分别计算日期和月份中位数
group_date = df.groupby('date')['count'].median()
group_month = df.groupby('year_month')['count'].median()
group_month.index = pd.to_datetime(group_month.index)
plt.figure(figsize=(16,5))
plt.plot(group_date.index, group_date.values, '-', color = 'b', label = '每天
租赁数量中位数', alpha=0.8)
plt.plot(group_month.index, group_month.values, '-o', color='orange',
label = '每月租赁数量中位数')
plt.legend()
plt.show()
2012年相比2011年租赁数量有所增长, 且波动幅度相类似.
剩余16页未读,继续阅读
weixin_38519763
- 粉丝: 5
- 资源: 922
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5