- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python机器学习logistic回归代码解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文主要研究的是Python机器学习logistic回归的相关内容,同时介绍了一些机器学习中的概念,具体如下.
Logistic回归的主要目的:寻找一个非线性函数sigmod最佳的拟合参数 。
拟合、插值和逼近是数值分析的三大工具 。
回归:对一直公式的位置参数进行估计 。
拟合:把平面上的一些系列点,用一条光滑曲线连接起来 。
logistic主要思想:根据现有数据对分类边界线建立回归公式、以此进行分类 。
sigmoid函数:在神经网络中它是所谓的激励函数。当输入大于0时,输出趋向于1,输入小于0时,输出趋向0,输入为0时,输出为0.5 。
梯度上升:要找到某个函数的最大值,最好的方法是沿着该函数的梯度方向探寻 。
收敛:随着迭代的运行算法的结果和真实结果的误差越来越小,且趋向于一个固定值.
爬山算法:是完完全全的贪心算法,每次鼠目寸光的选择一个当前最优解,英雌只能搜寻到局部最优值 。
模拟退火算法:也是一种贪心算法但它的sou索过程引入了随机因素,模拟退火算法以一定的概念来接受一个比当前解要差的解,因此有可能会跳出这个局部最优解,达到全局最优解.
处理数据中的缺失值:
使用可用特征的均值来填补缺失值 。
使用特殊值来填补缺失值,如-1 。
忽略有缺失值的样本 。
使用相似样本的均值添补缺失值 。
使用其它机器学习算法预测缺失值 。
标签与特征不同,很难确定采用某个合适的值来替换.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#coding:utf-8
from
numpy
import
*
import
math
def
loadDataSet():
dataMat
=
[]; labelMat
=
[]
fr
=
open
(
'testSet.txt'
)
for
line
in
fr.readlines():
lineArr
=
line.strip().split()
dataMat.append([
1.0
,
float
(lineArr[
0
]),
float
(lineArr[
1
])])
labelMat.append(
int
(lineArr[
2
]))
return
dataMat,labelMat
def
sigmoid(inX):
return
longfloat(
1.0
/
(
1
+
exp(
-
inX)))
#sigmoid函数公式
def
gradAscent(dataMatIn, classLabels):
#dataMatIn 一个2维的数组;classLabels 类别标签
dataMatrix
=
mat(dataMatIn)
#转换为矩阵
labelMat
=
mat(classLabels).transpose()
#得到矩阵的转置矩阵
m,n
=
shape(dataMatrix)
#读取矩阵的长度,二维矩阵,返回两个值
alpha
=
0.001
#向目标移动的步长
maxCycles
=
500
#迭代次数
weights
=
ones((n,
1
))
#ones()函数用以创建指定形状和类型的数组,默认情况下返回的类型是float64。但是,如果使用ones()函数时指定了数据类型,那么返回的就是该类型
for
k
in
range
(maxCycles):
h
=
sigmoid(dataMatrix
*
weights)
#matrix mult
error
=
(labelMat
-
h)
#vector subtraction
weights
=
weights
+
alpha
*
dataMatrix.transpose()
*
error
#matrix mult
return
weights
def
plotBestFit(weights):
import
matplotlib as mpl
mpl.use(
'Agg'
)
#为了防止出现:RuntimeError: could not open display报错
import
matplotlib.pyplot as plt
dataMat,labelMat
=
loadDataSet()
dataArr
=
array(dataMat)
n
=
shape(dataArr)[
0
]
xcord1
=
[]; ycord1
=
[]
xcord2
=
[]; ycord2
=
[]
for
i
in
range
(n):
if
int
(labelMat[i])
=
=
1
:
xcord1.append(dataArr[i,
1
]); ycord1.append(dataArr[i,
2
])
else
:
xcord2.append(dataArr[i,
1
]); ycord2.append(dataArr[i,
2
])
fig
=
plt.figure()
#figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
ax
=
fig.add_subplot(
111
)
# 参数111的意思是:将画布分割成1行1列,图像画在从左到右从上到下的第1块,
ax.scatter(xcord1, ycord1, s
=
30
, c
=
'red'
, marker
=
's'
)
ax.scatter(xcord2, ycord2, s
=
30
, c
=
'green'
)
x
=
arange(
-
3.0
,
3.0
,
0.1
)
y
=
(
-
weights[
0
]
-
weights[
1
]
*
x)
/
weights[
2
]
ax.plot(x, y)
plt.xlabel(
'X1'
); plt.ylabel(
'X2'
);
plt.savefig(
'plotBestFit.png'
)
#因为我是腾讯云服务器,没有图形界面,所以我保存为图片。
#随机梯度上升算法
def
stocGradAscent0(dataMatrix, classLabels):
m,n
=
shape(dataMatrix)
alpha
=
0.01
weights
=
ones(n)
#initialize to all ones
for
i
in
range
(m):
h
=
sigmoid(
sum
(dataMatrix[i]
*
weights))
error
=
classLabels[i]
-
h
weights
=
weights
+
alpha
*
error
*
dataMatrix[i]
#回归系数的更新操作
return
weights
#改进的随机梯度上升算法
def
stocGradAscent1(dataMatrix, classLabels, numIter
=
150
):
#较之前的增加了一个迭代次数作为第三个参数,默认值150
m,n
=
shape(dataMatrix)
weights
=
ones(n)
for
j
in
range
(numIter):
dataIndex
=
range
(m)
for
i
in
range
(m):
alpha
=
4
/
(
1.0
+
j
+
i)
+
0.0001
randIndex
=
int
(random.uniform(
0
,
len
(dataIndex)))
#样本随机选择
h
=
sigmoid(
sum
(dataMatrix[randIndex]
*
weights))
error
=
classLabels[randIndex]
-
h
weights
=
weights
+
alpha
*
error
*
dataMatrix[randIndex]
#回归系数的更新操作
del
(dataIndex[randIndex])
return
weights
#以回归系数和特征向量作为输入计算对应的sigmoid值
def
classifyVector(inX, weights):
prob
=
sigmoid(
sum
(inX
*
weights))
if
prob >
0.5
:
return
1.0
#如果sigmoid值大于0.5函数返回1,否则返回0
else
:
return
0.0
#打开测试集和训练集,并对数据进行格式化处理的函数
def
colicTest():
frTrain
=
open
(
'horseColicTraining.txt'
); frTest
=
open
(
'horseColicTest.txt'
)
trainingSet
=
[]; trainingLabels
=
[]
for
line
in
frTrain.readlines():
currLine
=
line.strip().split(
'\t'
)
lineArr
=
[]
for
i
in
range
(
21
):
lineArr.append(
float
(currLine[i]))
trainingSet.append(lineArr)
trainingLabels.append(
float
(currLine[
21
]))
trainWeights
=
stocGradAscent1(array(trainingSet), trainingLabels,
1000
)
#计算回归系数向量
errorCount
=
0
; numTestVec
=
0.0
for
line
in
frTest.readlines():
numTestVec
+
=
1.0
currLine
=
line.strip().split(
'\t'
)
lineArr
=
[]
for
i
in
range
(
21
):
lineArr.append(
float
(currLine[i]))
if
int
(classifyVector(array(lineArr), trainWeights))!
=
int
(currLine[
21
]):
errorCount
+
=
1
errorRate
=
(
float
(errorCount)
/
numTestVec)
print
"the error rate of this test is: %f"
%
errorRate
return
errorRate
#调用函数colicTest()10次,并求结果的平均值
def
multiTest():
numTests
=
10
; errorSum
=
0.0
for
k
in
range
(numTests):
errorSum
+
=
colicTest()
print
"after %d iterations the average error rate is: %f"
%
(numTests, errorSum
/
float
(numTests))
|
总结 。
以上就是本文关于Python机器学习logistic回归代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! 。
原文链接:http://blog.51cto.com/9399369/1958200 。
最后此篇关于Python机器学习logistic回归代码解析的文章就讲到这里了,如果你想了解更多关于Python机器学习logistic回归代码解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。 尽管知道我的数据库查
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在尝试运行 Android 应用程序时遇到问题并收到以下错误 java.lang.NoClassDefFoundError: com.parse.Parse 当我尝试运行该应用时。 最佳答案 在这
有什么办法可以防止etree在解析HTML内容时解析HTML实体吗? html = etree.HTML('&') html.find('.//body').text 这给了我 '&' 但我想
我有一个有点疯狂的例子,但对于那些 JavaScript 函数作用域专家来说,它看起来是一个很好的练习: (function (global) { // our module number one
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短的描述,就像您链接到 Facebook 上的内容一样。 当用户向站点添加链接时将调用它,因此在客户端启动
在 VS Code 中本地开发时,包解析为 C:/Users//AppData/Local/Microsoft/TypeScript/3.5/node_modules/@types//index而不是
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我被赋予了将一种语言“翻译”成另一种语言的工作。对于使用正则表达式的简单逐行方法来说,源代码过于灵活(复杂)。我在哪里可以了解更多关于词法分析和解析器的信息? 最佳答案 如果你想对这个主题产生“情绪化
您好,我在解析此文本时遇到问题 { { { {[system1];1;1;0.612509325}; {[system2];1;
我正在为 adobe after effects 在 extendscript 中编写一些代码,最终变成了 javascript。 我有一个数组,我想只搜索单词“assemble”并返回整个 jc3_
我有这段代码: $(document).ready(function() { // }); 问题:FB_RequireFeatures block 外部的代码先于其内部的代码执行。因此 who
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些
1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 X
【PHP代码】 复制代码 代码如下: $stmt = mssql_init('P__Global_Test', $conn) or die("initialize sto
在SQL查询分析器执行以下代码就可以了。 复制代码代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor curs
前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习🤭 题目 题目一: 二维数组中的
我是一名优秀的程序员,十分优秀!