#分类问题逻辑回归
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
m=15#Number of training examples
exam1=np.array([34.62366,30.286711,35.847409,60.182599,79.032736,35,55,51,75,52,58,77,67,47,92]).reshape(m,1)
exam2=np.array([78.024693,43.894998,72.902198,86.308552,75.344376,47,35,46,30,62,59,47,67,88,40]).reshape(m,1)
y=np.array([0,0,0,1,1,0,0,0,0,0,1,1,1,1,0]).reshape(m,1)
#寻找y是0和1各自对应的数组编号
num0=[]
num1=[]
for i in range(len(y)):
if y[i]==0:
num0.append(i)
else:
num1.append(i)
plt.scatter(exam1[num0],exam2[num0],color='red')
plt.scatter(exam1[num1],exam2[num1],color='blue')
plt.show()
#对x1和x2标准化
scaler=StandardScaler()
exam1=scaler.fit_transform(exam1)#必须是列向量
exam2=scaler.fit_transform(exam2)
plt.scatter(exam1[num0],exam2[num0],color='red')
plt.scatter(exam1[num1],exam2[num1],color='blue')
plt.show()
X0=np.ones((m,1))
X for i in range(iteration):#迭代次数
theta=theta-alpha*gradient
gradient=gradientFunction(X,y,theta,m)
return theta
alpha=0.01
iteration=40000
theta=gradient_descent(X,y,alpha,iteration)
print(theta)
print(costFunction(X,y,theta,m))
plt.scatter(exam1[num0],exam2[num0],color='red')
plt.scatter(exam1[num1],exam2[num1],color='blue')
plt.plot(exam1,(theta[0]-theta[1]*exam1)/theta[2])
plt.show() =np.hstack((X0,exam1,exam2))
def sigmoid(z):
return 1/(1+np.exp(-z))
def model(X,theta):
return sigmoid(np.dot(X,theta))
def costFunction(X,y,theta,m):
left=np.multiply(-y,np.log(model(X,theta)))
right=np.multiply(1-y,np.log(1-model(X,theta)))
return np.sum(left-right)/m
def gradientFunction(X,y,theta,m):
return (np.dot(np.transpose(X),model(X,theta)-y))/m
def gradient_descent(X,y,alpha,iteration):
#初始化theta
theta=np.array([1,1,1]).reshape(3,1)#矩阵形式才可以转置
gradient=gradientFunction(X,y,theta,m)#梯度初始化
for i in range(iteration):#迭代次数
theta=theta-alpha*gradient
gradient=gradientFunction(X,y,theta,m)
return theta
alpha=0.01
iteration=40000
theta=gradient_descent(X,y,alpha,iteration)
print(theta)
print(costFunction(X,y,theta,m))
plt.scatter(exam1[num0],exam2[num0],color='red')
plt.scatter(exam1[num1],exam2[num1],color='blue')
plt.plot(exam1,(theta[0]-theta[1]*exam1)/theta[2])
plt.show()
ML 分类问题逻辑回归2022-02-21
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...
- 【火炉炼AI】机器学习009-用逻辑回归分类器解决多分类问题 (本文所使用的Python库和版本号: Python...
- ☆☆☆☆☆逻辑回归 (LR)(分类/解决二分类问题) 一. sigmoid函数(逻辑回归函数) 1.t 就是线性回...