logistic回归 原创

1138-魏同学

发表文章数:75

首页 » 算法 » 正文

过程
1、找到一个合适的预测函数,一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程非常关键,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概形式”,比如是线性函数还是非线性函数。
2、构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他形式。综合考虑所有训练数据的“损失”,将cost求和或者求平均,记为J(w)函数,表示所有训练数据预测值与实际类别的偏差。
3、J(w)函数值越小表示预测函数越准确(即函数h越准确),所以要想办法求解函数J(w)的最小值。如梯度下降法等方法求解。

logistic回归的使用

# 逻辑斯蒂回归回归,用于分类而不是回归
import numpy as np

from sklearn.linear_model import LogisticRegression,LogisticRegressionCV

from sklearn import datasets

from sklearn.model_selection import train_test_split
np.logspace(-4,4,100)

logistic回归
                    原创

LogisticRegressionCV(Cs = [0.001,0.01,0.1,1,5,10,100])

logistic回归
                    原创

X,y = datasets.load_iris(True)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)
lr = LogisticRegression()

lr.fit(X_train,y_train)

# 分类问题,准确率 96.6%
lr.score(X_test,y_test)

logistic回归
                    原创

# 类别分3类
np.unique(y)

logistic回归
                    原创

# 每个类别中4个属性
X.shape

logistic回归
                    原创

lr.coef_

logistic回归
                    原创

lr.intercept_

logistic回归
                    原创

# 分类都是概率
lr.predict(X_test)

logistic回归
                    原创

lr.predict_proba(X_test)#概率哪个概率大就是哪个类别

logistic回归
                    原创

proba_ = lr.predict_proba(X_test)

proba_.argmax(axis = 1)#最大的概率类别

logistic回归
                    原创

计算概率

多分类问题

#概率是怎么计算的

w = lr.coef_
w

logistic回归
                    原创

b = lr.intercept_
b

logistic回归
                    原创

X_test.shape

logistic回归
                    原创

proba_[:10]

logistic回归
                    原创

y_ = X_test.dot(w.T) + b
# 逻辑斯蒂函数 = sigmoid函数
prob = 1 /(1 + np.e**(- y_))
# 归一化操作 和算法预测的概率完全一样
b = prob/prob.sum(axis = 1).reshape(-1,1)
b

logistic回归
                    原创

logistic回归概率计算(二分类)

import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
X,y = datasets.load_iris(True)
#将数据变为2分类问题,因为Logistic回归是二分类问题
cond = y!=2
X = X[cond]
y = y[cond]
from sklearn.model_selection import train_test_split
result = train_test_split(X,y,test_size =0.2)
result

logistic回归
                    原创

lr = LogisticRegression()
lr.fit(result[0],result[2])#分别代表X_train,y_train

logistic回归
                    原创

#属性还是4个
X.shape

logistic回归
                    原创

#类别变为2个
np.unique(y)

logistic回归
                    原创

w = lr.coef_
b = lr.intercept_
print(w,b)

logistic回归
                    原创

#算法计算的概率
proba_ = lr.predict_proba(result[1])
proba_

logistic回归
                    原创

result[1].dot(w[0])
#w[0]将二维转换为1唯

logistic回归
                    原创

#用公式手动计算的概率值
h = result[1].dot(w[0].T)+b
#类别1的概率为:P,另一类概率为1-p
p = 1/(1+np.e**(-h))
np.c_[1-p,p]

logistic回归
                    原创

logistic回归概率计算(多分类)

X,y = datasets.load_iris(True)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)
lr = LogisticRegression(multi_class = 'multinomial',solver = 'saga')
#saga随机梯度下降
lr.fit(X_train,y_train)
#算法计算
proba_ = lr.predict_proba(X_test)
proba_

logistic回归
                    原创

x = np.array([1,3,-1,10])
#softmax软最大:将数值转化成概率,然后进行比较
p = np.e**(x)/((np.e**(x)).sum())
p

logistic回归
                    原创

#三分类,三个方程,每个方程,四个系数
w = lr.coef_
b = lr.intercept_
print(w,b)

logistic回归
                    原创

h = X_test.dot(w.T)+b
h

logistic回归
                    原创

#将线性回归预测结果转换为概率
#使用softmax,手动计算的概率
p = np.e**h/((np.e**h).sum(axis = 1).reshape(-1,1))

logistic回归
                    原创

proba_

logistic回归
                    原创

未经允许不得转载:作者:1138-魏同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《logistic回归 原创》 发布于2020-11-25

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录