视频剪辑软件 Shell脚本 ClickHouse ASP.NET 后端面试 uicollectionview nginx默认端口号 iot系统 安卓程序源代码 a标签去除下划线 idea中svn的使用 android入门实例 less的比较级 css鼠标悬浮样式 ssr链接解析 python简易教程 python读取数据库 python中set的用法 python模块下载 javadate java案例 java初级 java数组添加元素 java线程停止 雪地求生 音频频谱分析软件 linux解压tar js删除节点 js获取父节点 电脑基础 高通cpu排行 js文件上传 jdk9下载 一键清除锁屏密码 软件工程pdf cad怎么拉伸 ps渐变工具在哪里 ps白色背景变透明 python游戏编程 illustrator下载
当前位置: 首页 > 学习教程  > python

天池龙珠计划——机器学习训练营 Task1

2021/2/6 22:23:10 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

目录机器学习算法(一): 基于逻辑回归的分类预测前言逻辑回归介绍实战基本参数iris数据集实战机器学习算法(一): 基于逻辑回归的分类预测 前言 笔记,主要记录阿里云天池龙珠训练营机器学习部分的学习成果 逻辑回归介…

目录

  • 机器学习算法(一): 基于逻辑回归的分类预测
  • 前言
  • 逻辑回归介绍
  • 实战
    • 基本参数
    • iris数据集实战

机器学习算法(一): 基于逻辑回归的分类预测

前言

笔记,主要记录阿里云天池龙珠训练营机器学习部分的学习成果

逻辑回归介绍

逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,主要用于两分类问题(即输出只有两种,分别代表两个类别)。

回归模型中,y是一个定性变量,比如y=0或1,logistic方法主要应用于研究某些事件发生的概率。

优点:
● 速度快,适合二分类问题
● 简单易于理解,直接看到各个特征的权重
● 能容易地更新模型吸收新的数据
缺点:
● 对数据和场景的适应能力有局限性,不如决策树算法适应性那么强
● 容易欠拟合,分类精度可能不高

实战

基本参数

import numpy as np 
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.linear_model import LogisticRegression
#这里导入了构建矩阵的numpy库、作图的plot和seaborn库、以及sklearn中线性模型的lr(逻辑回归)库
data = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
label = np.array([0, 0, 0, 1, 1, 1])
#这里构成了data(对应二维坐标上的六个点),label(表示data六个点对应的标签)
#可以看到共有0和1两种类型
lr = LogisticRegression()
lr = lr.fit(data, label)
#这里调用lr函数,并使用fit对data和label进行拟合
#其拟合方程为 y=w0+w1*x1+w2*x2
# 查看其对应模型的w
print('the weight of Logistic Regression:',lr_clf.coef_)

# 查看其对应模型的w0
print('the intercept(w0) of Logistic Regression:',lr_clf.intercept_)

在这里插入图片描述

# 可视化构造的数据样本点
plt.figure()
plt.scatter(data[:,0], data[:,1], c = label)#横轴为data矩阵0位元素,纵轴为1位元素,颜色根据label来分类
plt.title('Dataset')
plt.show()
#如下图,六个点分成了黑黄两类

在这里插入图片描述

# 可视化决策边界
plt.figure()
plt.scatter(data[:,0], data[:,1], c = label)
plt.title('Dataset')

nx, ny = 200, 100
x_min, x_max = plt.xlim()
y_min, y_max = plt.ylim()
x_grid, y_grid = np.meshgrid(np.linspace(x_min, x_max, nx),np.linspace(y_min, y_max, ny))

z_proba = lr.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])
z_proba = z_proba[:, 1].reshape(x_grid.shape)
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue')

plt.show()
#这里从横轴和纵轴的界限,构建等差矩阵x_grid和y_grid,使用拟合好的lr模型预测概率,并将所得概率为0.5(即分界点)的所有点画成线,成功将两类型的分界线画出

在这里插入图片描述

#现在我们新建两个点
new_data1 = np.array([[0, -1]])
new_data2 = np.array([[1, 2]])
#通过lr模型预测new1和new2的分类情况
new1_pre = lr.predict(new_data1)
new2_pre = lr.predict(new_data2)
#可以看到两个点分别属于0和1

在这里插入图片描述

#通过lr模型预测两个点的分布概率
new1_pro = lr.predict_proba(new_data1)
new2_pro = lr.predict_proba(new_data2)
#可以看到proba给出的是两种类型的所属概率,对于new1,属于0类的概率为0.695,属于1类的概率为0.304,new2同理

在这里插入图片描述

iris数据集实战

#依旧是导入使用的库
import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#不同的是,此次的数据来自sklearn自带的iris数据集
from sklearn.datasets import load_iris
data = load_iris()
iris_target = data.target #得到数据对应的标签
iris_data = pd.DataFrame(data = data.data, columns = data.feature_names)
iris_data.head(5)
#查看数据集前五行,每一行代表一个花的所有属性,对应有sl、sw、pl、pw四个属性的值

在这里插入图片描述

pd.Series(iris_target).value_counts()
#查看iris种类的分布情况,共有0、1、2三类,每类占50

在这里插入图片描述

## 合并标签和特征信息
iris_all = iris_data.copy() ##进行浅拷贝,防止对于原始数据的修改
iris_all['target'] = iris_target
## 特征与标签组合的散点可视化
sns.pairplot(data = iris_all, diag_kind='hist', hue= 'target')
plt.show()
#绘制直方图,横纵轴都是四个label,类别为target的三种,生成4*4矩阵图

在这里插入图片描述

# 选取其前三个特征绘制三维散点图
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')#3d图

iris_all_class0 = iris_all[iris_all['target']==0].values
iris_all_class1 = iris_all[iris_all['target']==1].values
iris_all_class2 = iris_all[iris_all['target']==2].values
# 'setosa'(0), 'versicolor'(1), 'virginica'(2)
ax.scatter(iris_all_class0[:,0], iris_all_class0[:,1], iris_all_class0[:,2],label='setosa')#三坐标分别是values的0、1、2位元素
ax.scatter(iris_all_class1[:,0], iris_all_class1[:,1], iris_all_class1[:,2],label='versicolor')
ax.scatter(iris_all_class2[:,0], iris_all_class2[:,1], iris_all_class2[:,2],label='virginica')
plt.legend()

plt.show()

在这里插入图片描述

#提取data和target的前两部分(label为0、1),4:1划分训练集和测试集
from sklearn.model_selection import train_test_split
X = iris_data.iloc[:100]
y = iris_target[:100]
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 2021)
#调用模型设置参数进行训练
lr = LogisticRegression(random_state=0, solver='lbfgs')
lr.fit(x_train, y_train)
#训练好后在train集合test集进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
from sklearn import metrics
#带哦用metrics库的acc,进行真实值与预测值的正确率检测
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))
#训练集回测结果和测试集测试结果都极为准确

在这里插入图片描述

#下面进行所有数据的三分类预测
x_train, x_test, y_train, y_test = train_test_split(iris_data, iris_target, test_size = 0.2, random_state = 2021)
clf = LogisticRegression(random_state=0, solver='lbfgs')
clf.fit(x_train, y_train)
## 在训练集和测试集上分布利用训练好的模型进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)

# 利用accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))
#回测正确率0.98,测试集正确率0.86

在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_2000056.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?