[Update] logistic回归原理与实现 | logistic – Pickpeup

logistic: นี่คือโพสต์ที่เกี่ยวข้องกับหัวข้อนี้

一、什么是logistic回归?

logistic 回归又叫对数几率回归,适合数值型的二值型输出的拟合,它其实是一个分类模型,比如根据患者的医疗数据判断它是否能被治愈。

二、logistic回归数学原理与算法实现

我们考虑1个输入的维数据,我们对输入数据进行线性加权得到

前面说到,logistic回归用于而分类,假设得到的类别为0或者1,那么可以使用sigmoid函数处理输入,这个函数类似于阶跃函数但是又是连续型函数,看下这个函数长什么样

其实衡量的是输入数据 归属于类别 1 的概率,当 的时候, ,可以认为 归属于类别 0 的概率较大,当 的时候,,可以认为 归属于类别 1 的概率较大。如果我们将线性加权得到的 作为 sigmoid 函数的输入,得到

这样就得到了输入数据 最终属于类别 1 的概率。

我们先考虑使用常规的均方差作为损失函数,这时候的损失函数为

采用梯度下降的方法对 进行更新,那么需要将损失函数对 求导得到

看到了吗?这里的梯度更新中包含了 ,而通过 sigmod 函数可以发现,当 位于 0 或者 1附近的时候,导数值基本趋近于 0,梯度收敛速度极慢。

所以在这种情况下我们可以考虑使用交叉熵作为损失函数。将作为输入数据的输出,对式 做个简单的变换

将视为类后验概率估计,则上式可以重写为

那么从而可以得到

上式可以合并为

设输入数据为,,表示第个输入数据,上式的似然函数为

然后我们的目标是求出使这一似然函数的值最大的参数估计,最大似然估计就是求出参数,使得上式取得最大值,对上式求导得到

“ 这里补充说明一下均方差和交叉熵损失的区别:均方差注重每个分类的结果,而交叉熵只注重分类正确的结果,所以交叉熵适合于分类问题,而不适合于回归问题,但是 logistic回归其实本质是 0-1 分类问题,所以这里依然适合作为 logistic 回归的损失函数。

2.1 梯度上升法估计参数

我们考虑中间的一部分,对求导得到

那么

我们使用**梯度上升法(Gradient ascent method)**求解参数,其迭代公式为

梯度已经在上面计算过了,即

定义

所以我们现在可以得到

代码实现

from

numpy

import

*

import

numpy

as

np

import

matplotlib.pyplot

as

plt

from

matplotlib.font_manager

import

FontProperties

def

loadDataSet

():

dataMat

=

[]

labelMat

=

[]

fr

=

open

(

'testSet.txt'

)

for

line

in

fr

.

readlines

():

lineArr

=

line

.

strip

()

.

split

()

dataMat

.

append

([

1.0

,

float

(

lineArr

[

]),

float

(

lineArr

[

1

])])

labelMat

.

append

(

int

(

lineArr

[

2

]))

return

dataMat

,

labelMat

def

sigmoid

(

inX

):

return

1.0

/

(

1

+

exp

(

-

inX

))

def

gradAscent

(

dataMatrix

,

classLabels

):

dataMatrix

=

mat

(

dataMatrix

)

# convert to NumPy matrix

labelMat

=

mat

(

classLabels

)

.

transpose

()

# convert to NumPy matrix

m

,

n

=

shape

(

dataMatrix

)

alpha

=

0.01

maxCycles

=

500

weights

=

ones

((

n

,

1

))

weights_list

=

list

()

for

k

in

range

(

maxCycles

):

# heavy on matrix operations

h

=

sigmoid

(

dataMatrix

*

weights

)

# matrix mult

error

=

(

labelMat

-

h

)

# vector subtraction

weights

=

weights

+

alpha

*

dataMatrix

.

transpose

()

*

error

# matrix mult

weights_list

.

append

(

weights

)

return

weights

,

weights_list

def

plot_weights

(

weights_list

):

font

=

FontProperties

(

fname

=

r

"/System/Library/Fonts/PingFang.ttc"

,

size

=

12

)

fig

=

plt

.

figure

(

figsize

=

(

8

,

8

))

x

=

range

(

len

(

weights_list

))

w0

=

[

item

[

,

]

for

item

in

weights_list

]

w1

=

[

item

[

1

,

]

for

item

in

weights_list

]

w2

=

[

item

[

2

,

]

for

item

in

weights_list

]

plt

.

subplot

(

311

)

plt

.

plot

(

x

,

w0

,

'r-'

,

label

=

"w0"

)

plt

.

ylabel

(

"w0"

)

plt

.

subplot

(

312

)

plt

.

plot

(

x

,

w1

,

'g-'

,

label

=

"w1"

)

plt

.

ylabel

(

"w1"

)

plt

.

subplot

(

313

)

plt

.

plot

(

x

,

w2

,

'b-'

,

label

=

"w2"

)

plt

.

ylabel

(

"w2"

)

plt

.

xlabel

(

"迭代次数"

,

FontProperties

=

font

)

plt

.

show

()

def

plotBestFit

(

weights

):

dataMat

,

labelMat

=

loadDataSet

()

dataArr

=

array

(

dataMat

)

n

=

shape

(

dataArr

)[

]

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

(

figsize

=

(

6

,

4

))

ax

=

fig

.

add_subplot

(

111

)

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

[

]

-

weights

[

1

]

*

x

)

/

weights

[

2

]

ax

.

plot

(

x

,

y

.

transpose

())

plt

.

xlabel

(

'X1'

)

plt

.

ylabel

(

'X2'

)

plt

.

show

()

def

plot_sigmoid

():

x

=

arange

(

-

60.0

,

60.0

,

1

)

y

=

sigmoid

(

x

)

fig

=

plt

.

figure

(

figsize

=

(

8

,

4

))

plt

.

xlabel

(

'x'

)

plt

.

ylabel

(

'sigmoid(x)'

)

plt

.

plot

(

x

,

y

.

transpose

())

plt

.

show

()

if

__name__

==

"__main__"

:

data_mat

,

label_mat

=

loadDataSet

()

weights

,

weights_list

=

gradAscent

(

data_mat

,

label_mat

)

#plot_weights(weights_list)

#plotBestFit(weights)

#plot_sigmoid()

“ 注意:在上程序的第45行使用的是等式,而不是,为什么呢?我们观察sigmoid函数可以发现0值是函数决策边界,而又是sigmoid函数的输入,所以另便可以得到分类边界线。

上述程序的运行结果如下图所示。

迭代次数与最终参数的变化如下图所示。

2.2 改进的随机梯度上升法

梯度上升算法在每次更新回归系数(最优参数)时,都需要遍历整个数据集。假设,我们使用的数据集一共有100个样本,回归参数有 3 个,那么dataMatrix就是一个100×3的矩阵。每次计算h的时候,都要计算dataMatrix×weights这个矩阵乘法运算,要进行100×3次乘法运算和100×2次加法运算。同理,更新回归系数(最优参数)weights时,也需要用到整个数据集,要进行矩阵乘法运算。总而言之,该方法处理100个左右的数据集时尚可,但如果有数十亿样本和成千上万的特征,那么该方法的计算复杂度就太高了。因此,需要对算法进行改进,我们每次更新回归系数(最优参数)的时候,能不能不用所有样本呢?一次只用一个样本点去更新回归系数(最优参数)?这样就可以有效减少计算量了,这种方法就叫做随机梯度上升算法(Stochastic gradient ascent)

def

stocGradAscent

(

dataMatrix

,

classLabels

,

numIter

=

150

):

dataMatrix

=

mat

(

dataMatrix

)

labelMat

=

mat

(

classLabels

)

.

transpose

()

m

,

n

=

np

.

shape

(

dataMatrix

)

weights

=

np

.

ones

((

n

,

1

))

weights_list

=

list

()

for

j

in

range

(

numIter

):

dataIndex

=

list

(

range

(

m

))

for

i

in

range

(

m

):

alpha

=

4

/

(

1.0

+

j

+

i

)

+

0.01

randIndex

=

int

(

random

.

uniform

(

,

len

(

dataIndex

)))

h

=

sigmoid

(

sum

(

dataMatrix

[

randIndex

]

*

weights

))

error

=

classLabels

[

randIndex

]

-

h

weights

=

weights

+

alpha

*

dataMatrix

[

randIndex

]

.

transpose

()

*

error

del

(

dataIndex

[

randIndex

])

weights_list

.

append

(

weights

)

return

weights

,

weights_list

该算法第一个改进之处在于,alpha在每次迭代的时候都会调整,并且,虽然alpha会随着迭代次数不断减小,但永远不会减小到0,因为这里还存在一个常数项。必须这样做的原因是为了保证在多次迭代之后新数据仍然具有一定的影响。如果需要处理的问题是动态变化的,那么可以适当加大上述常数项,来确保新的值获得更大的回归系数。另一点值得注意的是,在降低alpha的函数中,alpha每次减少,其中j是迭代次数,i是样本点的下标。第二个改进的地方在于跟新回归系数(最优参数)时,只使用一个样本点,并且选择的样本点是随机的,每次迭代不使用已经用过的样本点。这样的方法,就有效地减少了计算量,并保证了回归效果。

使用随机梯度上升法获得的分类结果如下图所示

迭代次数与最终参数的变化如下图所示,可以看到,在 8000 次以后,各参数基本趋于稳定,这个过程大约迭代了整个矩阵 80次,相比较于原先的 300 多次,大幅减小了迭代周期。

三、sklearn算法实现

sklearn实现 logistic 回归使用的是linear_model模型,还是使用上述的数据,代码如下

def

logistic_lib

(

dataMatrix

,

classLabels

):

from

sklearn

import

linear_model

model_logistic_regression

=

linear_model

.

LogisticRegression

(

solver

=

'liblinear'

,

max_iter

=

10

)

classifier

=

model_logistic_regression

.

fit

(

dataMatrix

,

classLabels

)

# 回归系数

print

(

model_logistic_regression

.

coef_

)

# 截距

print

(

model_logistic_regression

.

intercept_

)

# 准确率

accurcy

=

classifier

.

score

(

dataMatrix

,

classLabels

)

*

100

print

(

accurcy

)

输出结果如下

[[ 2.45317293  0.51690909 -0.71377635]]
[2.45317293]
97.0

参考


Ngành Logistics Đã Tiến Hóa Như Thế Nào?


Ngành Logistics Đã Tiến Hóa Như Thế Nào?
Logistics là một trong những bộ phận quan trọng của nền kinh tế. Nếu không có Logistics những ngành khác sẽ khó có thể vận hành bình thường được. Hình thành từ thời Hy Lạp cổ đại, trải qua hình năm tiến hoá, ngành logistics đã thấm sâu vào đời sống của chúng ta mà ít người có thể nhận ra được.
Nguồn: tapchitaichinh.vn, vnll.com.vn, caphesach.wordpress.com, vegasco.vn, thesaigontimes.vn, vlr.vn, ptexpress.com.vn

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูเพิ่มเติม

Ngành Logistics Đã Tiến Hóa Như Thế Nào?

Logistic Regression Details Pt1: Coefficients


When you do logistic regression you have to make sense of the coefficients. These are based on the log(odds) and log(odds ratio), but, to be honest, the easiest way to make sense of these are through examples. In this StatQuest, I walk you though two Logistic Regression Examples, stepbystep, and show you exactly how the coefficients are derived and how to interpret them.
⭐ NOTE: When I code, I use Kite, a free AIpowered coding assistant that will help you code faster and smarter. The Kite plugin integrates with all the top editors and IDEs to give you smart completions and documentation while you’re typing. I love it! https://www.kite.com/getkite/?utm_medium=referral\u0026utm_source=youtube\u0026utm_campaign=statquest\u0026utm_content=descriptiononly
NOTE: This StatQuest assumes that you are already familiar with…
The main ideas of Logistic Regression: https://youtu.be/yIYKR4sgzI8
Odds and Log(odds): https://youtu.be/ARfXDSkQf1Y
Odds Ratio and Log(odds ratio): https://youtu.be/8nm0G1uJzA
Linear Regression: https://youtu.be/PaFPbb66DxQ and
Linear Models: https://youtu.be/nk2CQITm_eo
https://youtu.be/NF5_btOaCig
For a complete index of all the StatQuest videos, check out:
https://statquest.org/videoindex/
If you’d like to support StatQuest, please consider…
Patreon: https://www.patreon.com/statquest
…or…
YouTube Membership: https://www.youtube.com/channel/UCtYLUTtgS3k1Fg4y5tAhLbw/join
…a cool StatQuest tshirt or sweatshirt:
https://shop.spreadshirt.com/statquestwithjoshstarmer/
…buying one or two of my songs (or go large and get a whole album!)
https://joshuastarmer.bandcamp.com/
…or just donating to StatQuest!
https://www.paypal.me/statquest
Lastly, if you want to keep up with me as I research and create new StatQuests, follow me on twitter:
https://twitter.com/joshuastarmer
0:00 Awesome song and introduction
1:13 Review of Logistic Regression Concepts
2:47 Coefficients for continuous variables
10:46 Coefficients for discrete variables
17:52 Coefficients for combinations of variable types
statquest logistic

Logistic Regression Details Pt1: Coefficients

Startup Tự Tin Là Unicorn Đầu Tiên Của Việt Nam | Shark Tank Việt Nam Mùa 2 | Thương Vụ Bạc Tỷ


Đăng ký theo dõi kênh YouTube TvHub : https://goo.gl/kRwiHc

Shark Tank Việt Nam là chương trình truyền hình thực tế dành cho các doanh nhân khởi nghiệp thuyết trình trước các nhà đầu tư (SHARK) để thuyết phục SHARK đầu tư vào dự án kinh doanh của mình. Shark Tank đã thành công tại nhiều nước trên thế giới, hiện đã phát sóng: mùa thứ 13 tại Anh; mùa thứ 11 tại Canada \u0026 mùa thứ 7 tại Mỹ.
Tại Việt Nam, Shark Tank được công ty TV HUB độc quyền sản xuất. Shark Tank Việt Nam với những cuộc đua kịch tính, những khát khao thành công bay xa và cảm xúc dâng trào. Chương trình dự kiến sẽ lên sóng trong thời gian ngắn sắp tới, với ban giám khảo là các “cá mập” rót vốn, đều là những doanh nhân lớn và có tiếng tăm trên thương trường.

Theo dõi \”Shark Tank\” trên Facebook: https://www.facebook.com/SharkTankVietnam
sharktank sharktankvietnam thuongvubacty showkinhdoanh showtruyenhinh realityshow shartankmua2 thuongvu bactymua2
@ Bản quyền thuộc về TV HUB Media

Startup Tự Tin Là Unicorn Đầu Tiên Của Việt Nam | Shark Tank Việt Nam Mùa 2 | Thương Vụ Bạc Tỷ

Hướng dẫn SPSS | Thực hiện mô hình Binary Logistic trên SPSS (Binary Logistic in SPSS)


Dịch vụ Phân tích và Đào tạo trực tuyến SPSS AMOS STATA R 0905392489
Tham gia vào 3 nhóm sau các bạn nhé!!!
(1) Link trao đổi thông tin đầu tư (CK \u0026 Crypto) hàng ngày https://zalo.me/g/fsyhsj130
(2) Link trao đổi kỹ năng Phân tích SPSS AMOS STATA R https://zalo.me/g/uexwkk296
(3) Link đăng ký Khóa học Dự báo \u0026 Định giá cổ phiếu https://zalo.me/g/xcviuf775

Nếu các bạn thấy thông tin hữu ích có thể mời Team chúng mình 1 ly cafe nhé, đó sẽ là nguồn động lực để Team chúng mình tạo thêm nhiều Video hữu ích và có thể duy trì \u0026 phát triển thêm nhiều dự án có ích khác:
1. STK: 0041000322052, Ngô Đức Chiến, VCB Đà Nẵng (Ngân hàng TMCP Ngoại Thương Việt Nam – Chi nhánh Đà Nẵng)
2. STK: 2000206273597, Ngô Đức Chiến, Agribank Đà Nẵng (Ngân hàng Nông nghiệp \u0026 Phát triển nông thôn Việt Nam – Chi nhánh Đà Nẵng)
Thank You from Our hearts!!!

Download Tài Tài liệu Thực hành SPSS, AMOS ủng hộ mình nhé!!!
Link download Tài liệu Thực hành SPSS, AMOS:
(1) Chuyên mục Thống kê trong SPSS: https://123doc.net/document/6883894huongdanthuchanhthongkebangphanmemspss.htm
(2) Chuyên mục Kiểm định trong SPSS: https://123doc.net/document/6884798huongdanthuchiencacphepkiemdinhtrongspss.htm
(3) Chuyên mục Nâng cao trong SPSS: https://123doc.net/document/6892574huongdanspssmohinhdubaoarimabinarylogisticsphuongsaikhongdongnhatnangcao.htm
(4) Các bước thực hiện Mô hình hồi quy tuyến tính OLS trong SPSS: https://123doc.net/document/6884797huongdancacbuocthuchienmohinhhoiquyolstrongspss.htm
(5) Các bước thực hiện Mô hình cấu trúc tuyến tính SEM trong AMOS: https://123doc.net/document/6883895huongdanamoscacbuocthuchienmohinhcautructuyentinhsem.htm
Hotline đăng ký học SPSS AMOS STATA R 0905392489
SPSS; AMOS; R; Chiến
Huongdanspss; SPSScoban; SPSSĐàNẵng
thựchànhSPSS; hướngdẫnSPSS

Hướng dẫn SPSS | Thực hiện mô hình Binary Logistic trên SPSS (Binary Logistic in SPSS)

Bài giảng 43: Mô hình hồi qui logistic


Bài này sẽ giới thiệu mô hình hồi qui logistic và diễn giải kết quả phân tích

Bài giảng 43: Mô hình hồi qui logistic

นอกจากการดูบทความนี้แล้ว คุณยังสามารถดูข้อมูลที่เป็นประโยชน์อื่นๆ อีกมากมายที่เราให้ไว้ที่นี่: ดูบทความเพิ่มเติมในหมวดหมู่Music of Turkey

ขอบคุณมากสำหรับการดูหัวข้อโพสต์ logistic

See also  TüRKÇE EN GüZEL KARIşIK DUYGUSAL şARKILAR 2020 YENi !!! @Elam Muzik | müzik | En son Tay şarkıları

2 thoughts on “[Update] logistic回归原理与实现 | logistic – Pickpeup”

Leave a Comment