1.1、回归与分类的区别
在机器学习中分为有监督学习和无监督学习。
有监督学习是带有标签的,而无监督学习只需要输入一些数据
有监督分为回归和聚类
分类的输出是已知类别(在一定的集合中确定)
回归的输出是不确定的
1.2、逻辑回归算法原理
注:虽然逻辑回归里面有回归两个字,但是它是完成二分类的任务
逻辑回归可以理解为利用回归的方法去进行分类
sigmod函数中的自变量z是连续的从负无穷到正无穷,值域是从0到1,所以可以看成百分比,根据阈值进行二分类
1.3、损失函数
1.4、w参数更新
1.5、b参数更新
1.6、分类和回归模型评价指标
MAPE:
回归模型的评价指标都差不多,一般情况下采用均方根误差和MAPE
1.7、逻辑回归实战
1.7.1、归一化
假设一份数据有特征并不唯一,即可能x1、x2、x3.......
因为特征代表物理量,所以它的物理量表示和量纲并不一样,无论是在机器学习还是在深度学习模型都会认为数值越大的特征越重要,但是实际上并不是一定是最重要的。因此需要归一化
方法是:
所有数据都是在0-1之间,所以就避免了量纲和物理量的影响
1.7.2、实战代码
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 读取数据
dataset = pd.read_csv("breast_cancer_data.csv")
# print(dataset)
# 提取x
X = dataset.iloc[:, : -1]
# print(X)
# 提取数据中的标签
Y = dataset['target']
# print(Y)
# 划分数据集和测试集
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
# 进行数据的归一化
sc = MinMaxScaler(feature_range=(0, 1))
x_train = sc.fit_transform(x_train)
x_test = sc.fit_transform(x_test)
# print(x_train)
# 逻辑回归模型搭建
lr = LogisticRegression()
lr.fit(x_train, y_train)
# 打印模型的参数
# print('w:', lr.coef_)
# print('b', lr.intercept_)
# 利用训练好的模型进行推理测试
pre_reslut = lr.predict(x_test)
# print(pre_reslut)
# 打印预测结果的概率
pre_reslut_proba = lr.predict_proba(x_test)
# print(pre_reslut_proba)
# 获取恶性肿瘤的概率
pre_list = pre_reslut_proba[:, 1]
# print(pre_list)
# 设置阈值
thresholds = 0.3
# 设置保存结果的列表
result = []
result_name = []
for i in range(len(pre_list)):
if pre_list[i] > thresholds:
result.append(1)
result_name.append('恶性')
else:
result.append(0)
result_name.append('良性')
# 打印阈值调整后的结果
# print(result)
# print(result_name)
# 输出结果的精确率和召回还有f1值
report = classification_report(y_test, result, labels=[0, 1], target_names=['良性肿瘤', '恶性肿瘤'])
print(report)