当前位置: 首页 > 后端技术 > Python

100天搞定机器学习-Day4-6Logisticregression

时间:2023-03-26 12:08:09 Python

Logisticregressionavik-jain的介绍不是特别详细,再来说说这个算法。1.在分类问题中,比如判断一封邮件是不是垃圾邮件,判断一个肿瘤是不是阳性,目标变量是离散的,只有两个值,通常编码为0和1。假设我们有一个特征X,画一个散点图,结果如下。这时,如果我们用线性回归拟合一条直线:hθ(X)=θ0+θ1X,如果Y≥0.5,则判断为1,否则为0。这样,我们也可以构造一个模型用于分类,但是会有很多缺点,比如鲁棒性差,准确率低。逻辑回归更适合此类问题。逻辑回归假设函数如下。它用函数g对θTX进行变换,将其映射到0到1的范围内,函数g称为sigmoid函数或logistic函数。函数图像如下图所示。我们在输入特征的时候,得到的hθ(x)其实就是这个样本属于1的类别的概率值,换句话说就是用逻辑回归来得到一个样本属于某个类别的概率。2.Evaluation回忆一下之前线性回归中使用的损失函数: 如果这个损失函数也用在逻辑回归中,得到的函数J是一个具有多个局部极小值的非凸函数,很难求解,所以您需要更改成本函数。重新定义一个成本函数如下:当实际样本属于类别1时,如果预测概率也为1,则损失为0,预测正确。相反,如果预测为0,则损失将是无限的。这样构造的损失函数是合理的,也是一个凸函数,很方便得到参数θ,从而使损失函数J最小化。3.优化我们已经定义了损失函数J(θ),接下来的任务就是寻找参数θ。我们的目标很明确,就是找到一组θ来最小化我们的损失函数J(θ)。最常用的求解方法有两种:批量梯度下降法(batchgradientdescent)、牛顿迭代法(Newton'smethod)。这两种方法都是通过迭代得到数值解,但牛顿迭代法的收敛速度更快。”实验-SeparationLine”Step0:DataPreview数据集链接:https://pan.baidu.com/s/1TkUe...提取码:hrrm该数据集包含社交网络中用户的信息。这些信息涉及用户ID、性别,age,andestimatedsalary.一家汽车公司刚刚推出了他们的新款豪华SUV,我们试图预测哪些用户会购买这款新款SUV。最后一列用于表示用户是否购买。我们将建立一个模型,根据年龄和期望薪水这两个变量来预测用户是否会购买这款SUV。所以我们的特征矩阵将是这两列。我们试图找到用户的年龄和预估工资与他是否购买SUV的决定之间的某种相关性。第1步|数据预处理导入库importnumpyasnpiimportmatplotlib.pyplotaspltimportpandasaspdimportdatasetdataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]]。valuesY=dataset.iloc[:,4].valuessplitdatasetintotrainingsetandtestsetfromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=0.25,random_state=0)特征从sklearn.preprocessingimportStandardScalersc=StandardScaler()X_train=sc.fit_transform(X_train)X_test=sc.transform(X_test)步骤2|逻辑回归模型这个工作的库会是一个线性模型库,所以叫Linear是因为逻辑回归是一个线性分类器,也就是说我们在一个二维空间,我们的两类用户(购买和非-purchase)将被一条直线分开。然后导入逻辑回归类。接下来我们将创建一个此类的对象,它将作为训练集的分类器。将逻辑回归应用于训练集fromsklearn.linear_modelimportLogisticRegressionclassifier=LogisticRegression()classifier.fit(X_train,y_train)step3|predict预测测试集结果y_pred=classifier.predict(X_test)step4|评估我们为测试集预测的预测。现在我们将评估逻辑回归模型是否被正确学习和理解。所以这个混淆矩阵将包含我们模型的正确和错误预测。生成混沌矩阵fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)可视化frommatplotlib.colorsimportListedColormapX_set,y_set=X_train,y_trainX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,stop=X_set[:,1].max()+1,step=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jinenumerate(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('LOGISTIC(训练集)')plt.xlabel('年龄')plt.ylabel('预估工资')plt.图例()plt。show()X_set,y_set=X_test,y_testX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,stop=X_set[:,1].max()+1,step=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jinenumerate(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('LOGISTIC(测试集)')plt.xlabel('年龄')plt.ylabel('预估工资')plt.图例()plt。展示()