#分类问题逻辑回归
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 就是线性回...