Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
l2902392385
machine-learning-in-action-python3
提交
231f8fa1
M
machine-learning-in-action-python3
项目概览
l2902392385
/
machine-learning-in-action-python3
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
machine-learning-in-action-python3
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
231f8fa1
编写于
7月 31, 2018
作者:
H
hathackerwang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ch07
上级
d340a336
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
66 addition
and
0 deletion
+66
-0
ch07-Linear_regrs/Build_model.py
ch07-Linear_regrs/Build_model.py
+66
-0
未找到文件。
ch07-Linear_regrs/Build_model.py
0 → 100644
浏览文件 @
231f8fa1
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 14 15:06:05 2018
@author: Administrator
"""
#训练算法:建立模型
#交叉验证测试岭回归
#@xArr:从网站中获得的玩具套装样本数据
#@yArr:样本对应的出售价格
#@numVal:交叉验证次数
def
crossValidation
(
xArr
,
yArr
,
numVal
=
10
):
#m,n=shape(xArr)
#xArr1=mat(ones((m,n+1)))
#xArr1[:,1:n+1]=mat(xArr)
#获取样本数
m
=
len
(
yArr
)
indexList
=
range
(
m
)
#将每个回归系数对应的误差存入矩阵
errorMat
=
zeros
((
numVal
,
30
))
#进行10折交叉验证
for
i
in
range
(
numVal
):
trainX
=
[];
trainY
=
[]
testX
=
[];
testY
=
[]
#混洗索引列表
random
.
shuffle
(
indexList
)
#遍历每个样本
for
j
in
range
(
m
):
#数据集90%作为训练集
if
j
<
m
*
0.9
:
trainX
.
append
(
xArr1
[
indexList
[
j
]])
trainY
.
append
(
yArr
[
indexList
[
j
]])
#剩余10%作为测试集
else
:
testX
.
append
(
xArr1
[
indexList
[
j
]])
testY
.
append
(
yArr
[
indexList
[
j
]])
#利用训练集计算岭回归系数
wMat
=
ridgeRegres
(
trainX
,
trainY
)
#对于每一个验证模型的30组回归系数
for
k
in
range
(
30
):
#转为矩阵形式
matTestX
=
mat
(
testX
);
matTrainX
=
mat
(
trainX
)
#求训练集特征的均值
meanTrain
=
mean
(
matTrainX
,
0
)
#计算训练集特征的方差
varTrain
=
val
(
matTrainX
,
0
)
#岭回归需要对数据特征进行标准化处理
#测试集用与训练集相同的参数进行标准化
matTestX
=
(
matTestX
-
meanTrain
)
/
varTrain
#对每组回归系数计算测试集的预测值
yEst
=
matTestX
*
mat
(
wMat
[
k
,:]).
T
+
mean
(
trainY
)
#将原始值和预测值的误差保存
errorMat
[
i
,
k
]
=
rssError
(
yEst
.
T
.
A
,
array
(
testY
))
#对误差矩阵中每个lamda对应的10次交叉验证的误差结果求均值
meanErrors
=
mean
(
errorMat
,
0
)
#找到最小的均值误差
minMean
=
float
(
min
(
meanErrors
))
#将均值误差最小的lamda对应的回归系数作为最佳回归系数
bestWeigths
=
wMat
[
nonzero
(
meanErrors
==
minMean
)]
xMat
=
mat
(
xArr
);
yMat
=
mat
(
yArr
).
T
meanX
=
mean
(
xMat
,
0
);
valX
=
val
(
xMat
,
0
)
#数据标准化还原操作
unReg
=
bestWeigths
/
valX
print
(
'the best model from Ridge Regression is :
\n
'
,
unReg
)
print
(
'with constant term :'
,
-
1
*
sum
(
multiply
(
meanX
,
unReg
))
+
mean
(
yMat
))
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录