*实验目的*
理解逻辑回归算法原理,掌握逻辑回归算法框架;
理解逻辑回归的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)被广泛用于预测受伤患者的死亡率,使用逻辑回归 基于观察到的患者特征(年龄,性别,体重指数,各种血液检查的结果等)分析预测发生特定疾病(例如糖尿病,冠心病)的风险。逻辑回归模型也用于预测在给定的过程中,系统或产品的故障的可能性。还用于市场营销应用程序。
标签:iris,逻辑,predict,test,train,np,data From: https://www.cnblogs.com/cmx3186588507-/p/16861793.html