📜  大数据分析-Logistic回归(1)

📅  最后修改于: 2023-12-03 15:08:11.517000             🧑  作者: Mango

大数据分析-Logistic回归

介绍

Logistic回归是一种二元分类算法,它能够对数据进行分类,将其分为正类和负类。Logistic回归常常被用于预测某个事物的发生与否,比如用户是否会购买某个产品、某种疾病是否会发生等等。

在大数据分析中,Logistic回归可以通过训练大量数据得到模型,并利用模型来预测分类。

实现

下面是一个简单的Logistic回归模型的python实现:

import numpy as np

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

class LogisticRegression:
    def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True, verbose=False):
        self.lr = lr
        self.num_iter = num_iter
        self.fit_intercept = fit_intercept
        self.verbose = verbose
        
    def __add_intercept(self, X):
        intercept = np.ones((X.shape[0], 1))
        return np.concatenate((intercept, X), axis=1)

    def __loss(self, h, y):
        return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()
        
    def fit(self, X, y):
        if self.fit_intercept:
            X = self.__add_intercept(X)
        
        # 初始化权重
        self.theta = np.zeros(X.shape[1])
        
        for i in range(self.num_iter):
            z = np.dot(X, self.theta)
            h = sigmoid(z)
            gradient = np.dot(X.T, (h - y)) / y.size
            self.theta -= self.lr * gradient
            
            if self.verbose and i % 10000 == 0:
                z = np.dot(X, self.theta)
                h = sigmoid(z)
                print(f'loss: {self.__loss(h, y)}')
    
    def predict_prob(self, X):
        if self.fit_intercept:
            X = self.__add_intercept(X)
    
        return sigmoid(np.dot(X, self.theta))
    
    def predict(self, X, threshold=0.5):
        return self.predict_prob(X) >= threshold
使用

首先,需要将数据进行处理,使其适合用于Logistic回归模型训练。常见的处理方式包括特征缩放、特征选择和特征工程等。接下来,需要将数据集分为训练集和测试集,并使用训练集训练Logistic回归模型,最后使用测试集测试模型的准确率。

下面是一个简单的使用示例:

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成数据集
X, y = make_classification(n_samples=10000, n_features=10, n_classes=2, random_state=42)

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义Logistic回归模型
model = LogisticRegression(lr=0.1, num_iter=300000)

# 训练模型
model.fit(X_train, y_train)

# 预测测试集
y_pred = model.predict(X_test)

# 计算预测准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f%%' % (accuracy * 100.0))

以上代码中使用了sklearn库生成样本数据,并将数据集分为训练集和测试集。接着定义了Logistic回归模型并使用训练集对模型进行训练。最后使用测试集测试模型,并计算模型的预测准确率。