机器学习与数据挖掘python机器学习和人工智能入门

逻辑回归那些事儿(附模板代码)

2020-04-30  本文已影响0人  四毛m

逻辑回归(logistic regression)被广泛用于分类预测,例如:银行通过客户的用户行为判断客户是否会流失,医院通过病人肿瘤的形态特征判断肿瘤是否为良性,电子邮箱通过对邮件信息的识别判断是否为垃圾邮件等等。作为目前最流行使用的一种学习算法,逻辑回归能非常有效地对数据进行分类。

1. 回归假设

h_θ (x)=g(θ^T X),其中: X代表特征向量(即影响因子向量),θ^T代表参数的转置矩阵,g 代表一个常用的逻辑函数,为S形函数(Sigmoid function),公式为:g(z)=1/(1+e^{(-z)} )。合起来,我们可以得到逻辑回归的假设函数为:
h_θ (x)=1/(1+e^{(-θ^T X)} )
其中,θ^T X是参数θ和特征X的向量运算,展开就是:
θ^T X=θ_0+θ_1 x_1+θ_2 x_2+...+θ_n x_n(n代表特征的数量)

1)S形函数

import numpy as np
def sigmoid(z):
   return 1 / (1 + np.exp(-z))

2)假设判断

=举个栗子=
假设病人患恶性肿瘤为y=1,未患恶性肿瘤为y=0。现根据肿瘤大小(x_1)和肿瘤颜色(x_2)两个特征可以得到逻辑回归模型为:h_θ (x)=g(θ^T X)=g(θ_0+θ_1 x_1+θ_2 x_2)=1/(1+e^{-(θ_0+θ_1 x_1+θ_2 x_2)})
其中,参数θ_0=-0.8,θ_1=0.01,θ_2=-0.05,则模型为:
h_θ (x)=1/(1+e^{-(-0.8+0.01 x_1-0.05 x_2)})
已知一名病人的肿瘤大小为1cm,肿瘤颜色分类为5,则代入模型计算得到h_θ (x)=0.26,说明病人患恶性肿瘤的概率为0.26,概率低于0.5,由此我们将病人分类为“未患肿瘤(y=0)”。

3)决策边界

2.特征缩放

import numpy as np
def featurescaling(X):
  X=(X-np.average(X))/np.std(X)
  return X

3. 损失函数

J(θ)=1/m ∑_{(i=1)}^mCost(h_θ (x^{(i)} ),y^{(i)})(m表示样本数量)
对于逻辑回归,我们采用对数计算损失,其中:

image.png
简化可以得到:

最终可以得到逻辑回归的代价函数为:
import numpy as np
def costfunction(theta, X, y):
  theta = np.matrix(theta)
  X = np.matrix(X)
  y = np.matrix(y)
  part_1 = np.multiply(-y, np.log(sigmoid(X @ theta.T)))# 引用了sigmoid函数
  part_2 = np.multiply((1 - y), np.log(1 - sigmoid(X @ theta.T)))
  return np.sum(part_1 - part_2) / (len(X))

4.优化算法:梯度下降

def gradientDescent(X, y, theta, alpha, iters):#iters表示更新迭代次数
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    
    temp = np.matrix(np.zeros(theta.shape))# 设置temp作为theta的转换
    parameters = int(theta.ravel().shape[1]) # 计算参数的数量
    cost = np.zeros(iters)
    
    # 设置迭代循环
    for i in range(iters): 
        error = sigmoid(X @ theta.T) - y # 引用sigmoid函数
        
        for j in range(parameters):
            term = np.multiply(error, X[:,j])
            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
            
        theta = temp
        cost[i] = costfunction(theta, X, y) # 引用costfunction函数
        
    return theta, cost

4. 模板代码

# 1.创建X和y
X = df.iloc[:,:-1].values # 需根据实际情况更改
y = df.iloc[:,-1].values # 需根据实际情况更改

# 2.将数据分成训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)

# 3.特征缩放(Feature Scaling)
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)#转换变量
X_test = sc_X.fit_transform(X_test)#转换变量

# 4.利用逻辑回归进行分类
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state=0)
classifier.fit(X_train,y_train)

# 5.预测测试集中的y值
y_pred = classifier.predict(X_test)

# 6.用混淆矩阵检测准确率
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_pred)

如有错误,请指正。

上一篇 下一篇

猜你喜欢

热点阅读