24/8/14算法笔记 复习_逻辑回归sigmoid

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1/(1+np.exp(-x))

x = np.linspace(-5,5,100)
y = sigmoid(x)

plt.plot(x,y,color='green')
#损失函数
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from mpl_toolkits.mplot3d import Axes3D
#Z-score归一化
from sklearn.preprocessing import scale,StandardScaler

#加载数据
X,y = datasets.load_breast_cancer(return_X_y=True)

X=X[:,:2]#切片两个特征

#建模
model = LogisticRegression()
 
#训练,和之前线性回归,类似
#后面其他方法,算法,类似
model.fit(X,y)

#逻辑回归线性方程拿出来:系数
w1 = model.coef_[0,0]
w2 = model.coef_[0,1]
b = model.intercept_
print('方程系数',w1,w2)
print('截距',b)

#sigmoid函数
def sigmoid(X,w1,w2,b):
    z = w1*X[0] + w2*X[1] + b#方程表示
    
    return 1/(1+ np.exp(-z))

#损失函数
def loss_function(X,y,w1,w2,b):
    loss = 0
    for X_i,y_i in zip(X,y):
        p = sigmoid(X_i,w1,w2,b)#概率
        p=np.clip(p,0.0001,0.999)#裁剪  np.clip 在 loss_function 中的使用是为了防止概率值为0或1,这在对数计算中会导致数值不稳定。
        loss+= -y_i * np.log(p) +(1-y_i)* np.log(1-p)
    return loss

#定义参数w1,w2取值空间
w1_space= np.linspace (w1 - 2,w1 +2,100)
w2_space = np.linspace(w2 - 2,w2 +2,100)

#损失计算
#loss1_ 是通过遍历 w1_space 中的所有 w1 值,并计算每个 w1 值对应的损失函数值来创建的。这个过程是损失函数在不同 w1 权重参数下的表现,可以帮助我们理解权重参数如何影响模型的性能。
loss1_ = np.array([loss_function(X,y,i,w2,b) for i in w1_space])
loss2_ = np.array([loss_function(X,y,w1,i,b) for i in w2_space])

#可视化
fig1 = plt.figure(figsize=(12,9))
 
plt.subplot(2,2,1)
plt.plot(w1_space,loss1_,color='green')
 
plt.subplot(2,2,2)
plt.plot(w1_space,loss1_,color='red')

#逻辑回归代码实现
#将数据拆分
from sklearn.model_selection import train_test_split
X,y = datasets.load_iris(return_X_y=True)
cond = y!=2#过滤数据:类别是2,过滤掉  "cond"通常用作条件的缩写,表示一个需要被评估为真或假的表达式。
X=X[cond]
y=y[cond]

#加载数据并拆分
#将调练数据测试数据:80% 训练数据,保留20%,测试数据
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)
 
#训练
model = LogisticRegression()
model.fit(X_train,y_train)
 
y_pred = model.predict(X_test)
print('预测结果是:',y_pred)
 
proba_ = model.predict_proba(X_test)
print('预测概率是:\n',proba_)

#概率手动计算
def sigmoid(x):
    return 1/(1+np.exp(-z))
 
#方程系数和截距
w=model.coef_
b=model.intercept_
 
#求解线性方程
z=X_test.dot(w.reshape(-1))+b
 
p=sigmoid(z)
 
#列合并
#np.column_stack([1-p,p])
np.concatenate([(1-p).reshape(-1,1),p.reshape(-1,1)],axis = 1)[:5]

为什么要列合并?因为在逻辑回归中,我们通常需要一个概率矩阵,其中每一行代表一个样本,每一列代表该样本属于某个类别的概率。例如,对于二分类问题,我们通常会有两个列,一个表示属于类别0的概率,另一个表示属于类别1的概率。

loss1_ 是通过遍历 w1_space 中的所有 w1 值,并计算每个 w1 值对应的损失函数值来创建的。这个过程是损失函数在不同 w1 权重参数下的表现,可以帮助我们理解权重参数如何影响模型的性能。

np.cliploss_function 中的使用是为了防止概率值为0或1,这在对数计算中会导致数值不稳定。

在编程和逻辑语句中,"cond"通常用作条件的缩写,表示一个需要被评估为真或假的表达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值