Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
l2902392385
machine-learning-in-action-python3
提交
687237aa
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 搜索 >>
提交
687237aa
编写于
8月 15, 2018
作者:
H
hathackerwang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ch07
上级
231f8fa1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
93 addition
and
0 deletion
+93
-0
ch07-Linear_regrs/Forward_stepReg.py
ch07-Linear_regrs/Forward_stepReg.py
+38
-0
ch07-Linear_regrs/Local_weightLR.py
ch07-Linear_regrs/Local_weightLR.py
+55
-0
未找到文件。
ch07-Linear_regrs/Forward_stepReg.py
0 → 100644
浏览文件 @
687237aa
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 14 15:05:20 2018
@author: Administrator
"""
#前向逐步回归
#@eps:每次迭代需要调整的步长
def
stageWise
(
xArr
,
yArr
,
eps
=
0.01
,
numIt
=
100
):
xMat
=
mat
(
xArr
);
yMat
=
mat
(
yArr
)
yMean
=
mean
(
yMat
,
0
)
yMat
=
yMat
-
yMean
#将特征标准化处理为均值为0,方差为1
xMat
=
regularize
(
xMat
)
m
,
n
=
shape
(
xMat
)
#将每次迭代中得到的回归系数存入矩阵
returnMat
=
zeros
((
numIt
,
m
))
ws
=
zeros
((
n
,
1
));
wsTest
=
ws
.
copy
();
wsMat
=
ws
.
copy
()
for
i
in
range
(
numIt
):
print
(
ws
.
T
)
#初始化最小误差为正无穷
lowestError
=
inf
;
for
j
in
range
(
n
):
#对每个特征的系数执行增加和减少eps*sign操作
for
sign
in
[
-
1
,
1
]:
wsTest
=
ws
.
copy
()
wsTest
[
j
]
+=
eps
*
sign
#变化后计算相应预测值
yTest
=
xMat
*
wsTest
#保存最小的误差以及对应的回归系数
rssE
=
rssError
(
yMat
.
A
,
yTest
.
A
)
if
rssE
<
lowestError
:
lowestError
=
rssE
wsMat
=
wsTest
ws
=
wsMat
.
copy
()
returnMat
[
i
,:]
=
ws
return
returnMat
\ No newline at end of file
ch07-Linear_regrs/Local_weightLR.py
0 → 100644
浏览文件 @
687237aa
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 14 15:03:07 2018
@author: Administrator
"""
#局部加权线性回归
def
rssError
(
yArr
,
yHatArr
):
#返回平方误差和
return
((
yArr
-
yHatArr
)
**
2
).
sum
()
def
lwlr
(
testPoint
,
xArr
,
yArr
,
k
=
1.0
):
'''
#每个测试点赋予权重系数
@testPoint:测试点
@xArr:样本数据矩阵
@yArr:样本对应的原始值
@k:用户定义的参数,决定权重的大小,默认1.0
'''
#转为矩阵形式
xMat
=
mat
(
xArr
);
yMat
=
mat
(
yArr
).
T
#样本数
m
=
shape
(
xMat
)[
0
]
#初始化权重矩阵为m*m的单位阵
weights
=
mat
(
eye
((
m
)))
#循环遍历各个样本
for
j
in
range
(
m
):
#计算预测点与该样本的偏差
diffMat
=
testPoint
-
xMat
[
j
,:]
#根据偏差利用高斯核函数赋予该样本相应的权重
weights
[
j
,
j
]
=
exp
(
diffMat
*
diffMat
.
T
/
(
-
2.0
*
k
**
2
))
#将权重矩阵应用到公式中
xTx
=
xMat
.
T
*
(
weights
*
xMat
)
#计算行列式值是否为0,即确定是否可逆
if
linalg
.
det
(
xTx
)
==
0.0
:
print
(
'This matrix is singular,cannot do inverse'
)
return
#根据公式计算回归系数
ws
=
xTx
.
I
*
(
xMat
.
T
*
(
weights
*
yMat
))
#计算测试点的预测值
return
testPoint
*
ws
#测试集进行预测
def
lwlrTest
(
testArr
,
xArr
,
yArr
,
k
=
1.0
):
#测试集样本数
m
=
shape
(
testArr
)[
0
]
#测试集预测结果保存在yHat列表中
yHat
=
zeros
(
m
)
#遍历每一个测试样本
for
i
in
range
(
m
):
#计算预测值
yHat
[
i
]
=
lwlr
(
testArr
[
i
],
xArr
,
yArr
,
k
)
return
yHat
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录