*实验目的*

理解逻辑回归算法原理,掌握逻辑回归算法框架;
理解逻辑回归的sigmoid函数;
理解逻辑回归的损失函数;
针对特定应用场景及数据,能应用逻辑回归算法解决实际分类问题。

*实验内容*

1.根据给定的数据集,编写python代码完成逻辑回归算法程序,实现如下功能:

建立一个逻辑回归模型来预测一个学生是否会被大学录取。假设您是大学部门的管理员,您想根据申请人的两次考试成绩来确定他们的入学机会。您有来自以前申请人的历史数据,可以用作逻辑回归的训练集。对于每个培训示例,都有申请人的两次考试成绩和录取决定。您的任务是建立一个分类模型,根据这两门考试的分数估计申请人被录取的概率。
算法步骤与要求:

(1)读取数据;

1 import pandas as pd
2 data = pd.read_csv("E:/机器学习/ex2data1.txt", header=None, names=['x1','x2','y'])    #读取数据
3 data

 

 

 

 

(2)绘制数据观察数据分布情况;

1 import numpy as np
2 import pandas as pd
3 import matplotlib.pyplot as plt#引入所需安装包

 

 1 positive = data[data['y']==1]
 2 negative = data[data['y']==0]   
 3 #分别获取样本数据
 4 fig,ax = plt.subplots(figsize=(12,8))
 5 ax.scatter(positive['x1'],positive['x2'],s=30,c='r',marker='o',label='y')
 6 ax.scatter(negative['x1'],negative['x2'],s=30,c='g',marker='x',label='n')
 7 ax.legend(loc=1)    
 8 #显示标签位置
 9 ax.set_xlabel("X1 Score")
10 ax.set_ylabel("X2 Score")
11 plt.show()

 

 

 

 

 

 

 

(3)编写sigmoid函数代码;

1 import numpy as np
2 def f_sigmoid(z):
3     return 1/(1+np.exp(-z))

 

 

(4)编写逻辑回归代价函数代码;

 1 data.insert(0, 'ones',1)
 2 xi=np.array(data.iloc[:,0:3])   #x1列和x2列的数据转换为数组
 3 yi=np.array(data.iloc[:,3:4])   #y列的数据转换为数组
 4 wi=np.zeros(3)                  
 5 def f_cost(w,x,y):
 6     w=np.matrix(w)            #wi转换为矩阵
 7     z=f_sigmoid(np.dot(x,(w.T))) #调用sigmoid函数,dot函数计算两个矩阵内积
 8     Lw=np.sum(np.multiply(y,(-np.log(z)))+np.multiply((1-y),(-np.log(1-z))))/len(x)   #代价函数
 9     return Lw
10 f_cost(wi,xi,yi)

 

 

 

 

(5)编写梯度函数代码;

1 def tidu(w,x,y):
2     w=np.matrix(w)
3     z=f_sigmoid(np.dot(x,(w.T)))
4     WL=np.dot(((z-y).T),x)/len(x)
5     return np.array(WL).flatten()
6 tidu(wi,xi,yi)

 

 

 

 

(6)编写寻找最优化参数代码(可使用scipy.opt.fmin_tnc()函数);

1 from scipy import optimize
2 #引入opt安装包
3 result = optimize.fmin_tnc(func=f_cost, x0=wi, fprime=tidu, args=(xi, yi))
4 wi=result[0]
5 print(result)

 

 

 

 

(7)编写模型评估(预测)代码,输出预测准确率;

1 def predict(w,x):
2     w=np.matrix(w)
3     z=f_sigmoid(x*(w.T))
4     return [1 if i >= 0.5 else 0 for i in z]
5 predictValues=predict(wi,xi)
6 hypothesis=[1 if a==b else 0 for (a,b)in zip(predictValues,yi)]
7 accuracy=hypothesis.count(1)/len(hypothesis)
8 accuracy

 

 

 

(8)寻找决策边界,画出决策边界直线图。

1 x1=np.linspace(30,100,1000)
2 def boundary(X,w):
3     return [(-w[0]-w[1]*i)/w[2] for i in x1]
4 x2=boundary(x1,wi)
5 plt.scatter(positive['x1'],positive['x2'])
6 plt.scatter(negative['x1'],negative['x2'])
7 plt.plot(x1,x2,color='g')
8 plt.show()

 

 

 

 

2. 针对iris数据集,应用sklearn库的逻辑回归算法进行类别预测。

要求:

(1)使用seaborn库进行数据可视化;

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn import metrics
#引入安装包

 

1 data = load_iris() 
2 iris_target = data.target  
3 iris_features = pd.DataFrame(
4     data=data.data, columns=data.feature_names)
5 iris_all = iris_features.copy()
6 iris_all['target'] = iris_target
7 sns.pairplot(data=iris_all, diag_kind='hist', hue='target')
8 plt.show()

 

 

 

 

 

 

 

(2)将iri数据集分为训练集和测试集(两者比例为8:2)进行三分类训练和预测;

 1 X_train, X_test, y_train, y_test = train_test_split(
 2     iris_features, iris_target, test_size=0.2, random_state=2020)
 3 clf = LogisticRegression(random_state=0, solver='lbfgs')
 4 # 在训练集上训练逻辑回归模型
 5 clf.fit(X_train, y_train)
 6 print('逻辑回归的权重:\n', clf.coef_)
 7 print('逻辑回归的截距(w0)\n', clf.intercept_,'\n')
 8 train_predict = clf.predict(X_train)
 9 test_predict = clf.predict(X_test)
10 print(train_predict,'\n\n', test_predict)

 

 

 

(3)输出分类结果的混淆矩阵。

 1 X_train, X_test, y_train, y_test = train_test_split(
 2     iris_features, iris_target, test_size=0.2, random_state=2020)
 3 clf = LogisticRegression(random_state=0, solver='lbfgs')
 4 # 在训练集上训练逻辑回归模型
 5 clf.fit(X_train, y_train)
 6 print('逻辑回归的权重:\n', clf.coef_)
 7 print('逻辑回归的截距(w0)\n', clf.intercept_,'\n')
 8 train_predict = clf.predict(X_train)
 9 test_predict = clf.predict(X_test)
10 print(train_predict,'\n\n', test_predict)

 

 

*实验公式*

 1.sigmoid函数表达式

 

 

 

 2.代价函数公式

*逻辑回归算法的应用*

逻辑回归模型广泛用于各个领域,包括机器学习,大多数医学领域和社会科学。例如,最初由Boyd 等人开发的创伤和损伤严重度评分(TRISS)被广泛用于预测受伤患者的死亡率,使用逻辑回归 基于观察到的患者特征(年龄,性别,体重指数,各种血液检查的结果等)分析预测发生特定疾病(例如糖尿病,冠心病)的风险。逻辑回归模型也用于预测在给定的过程中,系统或产品的故障的可能性。还用于市场营销应用程序。

 

原文地址:http://www.cnblogs.com/cmx3186588507-/p/16861793.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性