本系列文章介绍人工智能的基础概念和常用公式。由于协及内容所需的数学知识要求,建议初二以上同学学习。 运行本系统程序,请在电脑安装好Python、matplotlib和scikit-learn库。相关安装方法可自行在百度查找。
逻辑回归算法虽然带有“回归”二字,但实际上它是一个分类算法。虽然可以进行多元分类分析,但本质上是二元分类计算。也是一种线性回归算法。
目录
Sigmoid函数
所谓二元分类是指,预测结果只有0和1两种结果。我们先看一个叫Sigmoid的函数。
sigmoid有一个性质:当z趋于+∞时,g(z)趋于1;当z于-∞时,g(z)趋于0。
逻辑回归预测函数
优缺点
示例说明
我们用scikit-learn自带的一个乳腺癌数据集进行练习。这个数据集总共有569个样品,每个样品有30个特征(每个特征代表一项数据如:病灶半径、纹理和周长等)。
我们使用LogisticRegression模型进行分析。这个模型会为每个样本输出两个概率,即为0的概率和为1的概率。1为阳性,0为阴性。那个概率大,就预测为那个类别。
由于逻辑回归只要预测值大于0.5即为一种类别。这样的预测面过于大,我们将对为0和为1的概率进行比较分析。再确定是阳性还是阴性。我们的分析方法是这样的:
- 比较阴性的概率和阳性的概率那个大。
- 阴性概率比阳性概率大的,并且阴性概率在0.9以上,阳性概率在0.3以下的,可定性为阴性。反之阳性也是如此鉴定。
- 鉴定为阴性和阳性的数据和样本数据结果比较,统计正确率。
示例程序
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
X = cancer.data
Y = cancer.target
x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.2)
model = LogisticRegression(solver='liblinear')
model.fit(x_train,y_train)
y_pred = model.predict_proba(x_test)
i=0
ipass=0
rate1 = 0.90
rate2 = 0.30
for yy in y_pred:
if(y_pred[0][0] > y_pred[0][1]) and (y_pred[0][0]>rate1 and y_pred[0][1]<rate2) and (y_test[i]==0):
ipass+=1
if(y_pred[0][0] < y_pred[0][1]) and (y_pred[0][1]>rate1 and y_pred[0][0]<rate2) and (y_test[i]==1):
ipass+=1
i+=1
print(ipass,"/",len(y_test),",",ipass/len(y_test))
运行结果
#运行结果
75 / 144 , 0.65789473
正确率是百分之六十五左右。由于测试数据是随机给出的,所以每次的预测值也是不确定的