逻辑回归
源连接源地址
逻辑回归用于分类问题,主要是在观测数据下,预测当前点属于哪个类别。简单的二分类,输出0,1,例如一个人在选举中是否会投票。
逻辑回归输出是离散的
线性回归输出是连续的
将概率转换为0,1的预测结果的任务叫做逻辑回归或者Sigmode函数。
假设
则
对多个独立样本有:
对数似然函数为(方便求解):
最大似然函数,用梯度下降求解:
用梯度下降法最大化函数更新规则:
只考虑一个样本
其中:
所以
带入参数更新公式更新参数:
Sigmoid 函数
取值范围[0,1], 定义域(-∞,+∞)
预测消费者是否会买车
第一步 数据预处理
第二步 创建逻辑回归模型
第三步 预测
第四步 评价
用混淆矩阵查看预测与真实之间的关系
第五步 可视化
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
dataset = pd.read_csv('./datasets/Social_Network_Ads.csv')
X = dataset.iloc[:,[2,3]].values
y = dataset.iloc[:,4].values
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
x1, x2 = np.meshgrid(np.arange(start=X_train[:,0].min()-1, stop=X_train[:,0].max()+1, step=0.01),
np.arange(start=X_train[:,1].min()-1, stop=X_train[:,1].max()+1, step=0.01)
)
# contourf 填充等高线 x1,x2对应网格,z网格高度
plt.contourf(x1,x2,classifier.predict(np.array([x1.ravel(),x2.ravel()]).T).reshape(x1.shape), alpha = 0.75,camp=ListedColormap(('red','green')))
#plt.show()
plt.xlim(x1.min(), x2.max())
plt.ylim(x2.min(),x2.max())
for i, j in enumerate(np.unique(y_test)):
plt.scatter(X_train[y_train==j,0], X_train[y_train==j,1],
c = ListedColormap(('yellow', 'red'))(i), label =j)
plt.legend()
plt.show()