目录
逻辑斯蒂回归
利用Logistics回归进行分类的主要思想是:根据现有数据对分类边界建立回归公式(f(x1,x2....))=w1x1+w2x2+.......),以此分类。这里的“回归”一词源于最佳拟合,表示要找到最佳拟合参数集。
Logistic Regression和Linear Regression的原理(函数:二乘法(y-wx)^2,最小)是相似的,可以简单的描述这样的过程。
原理过程
预测函数
概率满足一定条件后,就将类别化为某某类。
原理代码实现
import numpy as np
X = np.random.randn(50,4)
X.shape
w = np.random.randn(4)
X[[0]].dot(w)
w.T.dot(X[0])
例子
'''假如有一个罐子,里面有黑白两种颜色的球,数目多少不知,两种颜色的比例也不知。我们想知道罐中白球和黑球的比例,但我们不能把罐中的球全部拿出来数。现在我们可以每次任意从已经摇匀的罐中拿一个球出来,记录球的颜色,然后把拿出来的球 再放回罐中。这个过程可以重复,我们可以用记录的球的颜色来估计罐中黑白球的比例。假如在前面的一百次重复记录中,有七十次是白球,请问罐中白球所占的比例最有可能是多少?'''
1.请问罐子中白球的比例是多少?很多种可能10%,5%,95%……
2.请问罐子中白球的比例最有可能是多少?70%,进行精确计算,‘感觉’。
𝑓(𝑝)=𝑝70∗(1−𝑝)30 函数值大于0,该函数有最大值,x在导数为零的时候。求导
最大似然估计
一种重要而普遍的求估计量的方法。最大似然法明确地使用概率模型,其目标是寻找能够以较高概率产生观察数据的系统发生树。最大似然法是一类完全基于统计的系统发生树重建方法的代表。
原理
y是目标值,二分类问题,y要么等于1,要么等于0。 越大越好,-越小越好。
对函数进行求导(𝐽(𝜃)=−𝑙(𝜃))
𝑙(𝜃)越大越好,梯度上升优化l(θ)越大越好,梯度上升优化,𝐽(𝜃)=−𝑙(𝜃)越小越好,梯度下降了。
逻辑斯蒂回归概率计算
导包
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
加载划分数据
X,y = datasets.load_iris(True)
#将三分类问题变为二分类问题 属性还是4个 类别变成两个
cond = y!=2
X = X[cond]
y = y[cond]
from sklearn.model_selection import train_test_split
result = train_test_split(X,y,test_size = 0.2)
result
# X_test = result[1]
proba_ = lr.predict_proba(result[1])
proba_
lr = LogisticRegression()
lr.fit(result[0],result[2])
w = lr.coef_#斜率 属性有几个 w就有几个
b = lr.intercept_
print(w,b)
result[1].dot(w[0])
手动计算
# 手动计算概率
h = result[1].dot(w[0].T) + b
# 类别1的概率,p;另一类的概率是 1-p
# sigmoid函数中计算概率
p = 1/(1 + np.e**(-h))
np.c_[1-p,p]
多分类概率计算
X,y = datasets.load_iris(True)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)
'''{'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'},
optional (default='liblinear')'''
lr = LogisticRegression(multi_class = 'multinomial',solver = 'saga')#multinomial代表多重的,
lr.fit(X_train,y_train)
proba_ = lr.predict_proba(X_test)
proba_
x = np.array([1,3,-1,10])
# softmax 软最大:将数值转化成概率,比较
p = np.e**(x)/((np.e**(x)).sum())
p
# 三分类,三个方程,每个方程中4个系数
w = lr.coef_
b = lr.intercept_
b
h = X_test.dot(w.T) + b
# 二分类将h带入sigmod函数即可以得到概率,三分类用softmax
# 根据 softmax数学公式,计算了类别的概率
p = np.e**h/((np.e**h).sum(axis = 1).reshape(-1,1))
p[:10]