分类问题
在分类问题中,需要预测的变量y是离散的值,通常,尝试预测结果是否属于某一个类别属性。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的n组数据(训练集)来训练模型,并在训练结束后对给定的一组或多组数据(测试集)进行分类。
二元分类问题
逻辑回归算法
对于二分类问题,由于分成两类,需要让其中一类标签为0,另一类为1。我们需要一个函数,对于输入的每一组数据x^(i),都能映射成0-1之间的数。并且如果函数值大于0.5,就判定属于1,否则属于0。而且函数中需要待定参数,通过利用样本训练,使得这个参数能够对训练集中的数据有很准确的预测。可以使用sigmoid函数,如下
逻辑回归的参数求解
代价函数
同样使用此前的平均平方误差代价函数
使用梯度下降法,和单变量线性回归问题中的目标一样,要找出使得代价函数最小的一系列参数。
二元逻辑回归-python
使用sklearn
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# 创建一个示例数据集,这里我们使用一个虚拟数据集作为示例
data = {
'feature1': [2, 3, 5, 7, 9, 11, 13, 15, 17, 19],
'feature2': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'target': [0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
}
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 特征和目标变量
X = df[['feature1', 'feature2']]
y = df['target']
# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)
# 输出结果
print(f'准确率: {accuracy}')
print('混淆矩阵:')
print(conf_matrix)
print('分类报告:')
print(class_report)
# 新数据进行预测
new_data = pd.DataFrame({
'feature1': [8, 14],
'feature2': [3, 7]
})
# 预测新数据的类别
new_pred = model.predict(new_data)
# 输出新数据的预测结果
print('新数据的预测结果:')
print(new_pred)
多类别分类问题(Multinomial Logistic Regression)
假设有一个训练集,如上图表示的有 3 个类别,我们用三角形表示y=1,方框
表示y=2,叉叉表示y=3,下面要做的就是使用一个训练集,将其分成 3 个二元分
类问题。
欠拟合与过拟合
欠拟合:不能很好地适应的训练集
过拟合:过于强调拟合原始数据,而丢失了算法的本质
下两图中从左到右:欠拟合,合适的模型,过拟合
回归问题
分类问题
参考
逻辑回归(Logistic Regression)详解-CSDN博客
【逻辑回归】Logistic Regression逻辑回归模型学习笔记_logisticregression模型-CSDN博客