机器学习2--逻辑回归(案列)

糖尿病数据线性回归预测

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_diabetes
diabetes=load_diabetes()
data=diabetes['data']
target=diabetes['target']
feature_names=diabetes['feature_names']
data.shape
df = pd.DataFrame(data, columns=feature_names)
df.head()
# 抽取训练数据和预测数据
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
x_train.shape,x_test.shape
# 创建模型
from sklearn.linear_model import LinearRegression
linear=LinearRegression()
linear.fit(x_train,y_train)
# 预测
y_pred=linear.predict(x_test)
y_pred
# 得分: 回归的得分很低
#linear.score(x_test,y_test)
### 线性回归评估指标
#- mean_squared_error 均方误差
from sklearn.metrics import mean_squared_error as mse
# 均方误差
mse(y_test,y_pred)
#### 求线性方程: y = WX + b 中的W系数和截距b
# w系数
linear.coef_
# 10个特征 就有10个系数
# b截距
linear.intercept_
#### 研究每个特征和标记结果之间的关系.来分析哪些特征对结果影响较大
plt.figure(figsize=(5*4, 2*4))for i, col in enumerate(df.columns):# 每一列数据data2 = df[col].copy()# 画子图ax = plt.subplot(2, 5, i+1)ax.scatter(data2, target)# 线性回归:对每一个特征进行回归分析linear2 = LinearRegression()linear2.fit(df[[col]], target)# 每个特征的系数w和截距b# y = wx + bw = linear2.coef_[0]b = linear2.intercept_# print(w, b)# 画直线x = np.linspace(data2.min(), data2.max(), 2)y = w * x + bax.plot(x, y, c='r')# 特征score = linear2.score(df[[col]], target)  # 模型得分ax.set_title(f'{col}: {round(score, 3)}', fontsize=16)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
### 抛物线函数
# 抛物线函数
# f(x) = (x - 2)²  + 5# Python函数
f=lambda x:(x-2)**2+5
# 画图
x=np.linspace(-2,6,100)
y=f(x)
plt.plot(x,y)
#### 使用梯度下降算法 求 当x为多少时,函数f(x)的值最小
# ①对目标函数求导; 
# ②循环对参数更新;
# ①对目标函数求导; # 抛物线函数
# f(x) = (x - 2)²  + 5# 求导数
#  dx = 2x - 4
d = lambda x: 2 * x - 4
# ②循环对参数更新;
θ = 6
# 学习率 lr  : learning_rate 
lr=0.03
# 最大迭代次数
max_iter=100
θ_list = [θ]
# 循环
for i in range(max_iter):θ = θ - lr * d(θ)θ_list.append(θ)
θ_array = np.array(θ_list)
# 画图
x=np.linspace(-2,6,100)
y=f(x)
plt.figure(figsize=(4,5))
plt.plot(x,y)
plt.plot(θ_array,f(θ_array), marker='*')

Logistic Regression虽然名字里带“回归”,但是它实际上是一种分类方法,用于两分类问题(即输出只有两种)。首先需要先找到一个预测函数(h),显然,该函数的输出必须是两类值(分别代表两个类别),所以利用了*Logistic函数(或称为Sigmoid函数)*

#1实战手写数字识别
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 逻辑回归: 分类
from sklearn.linear_model import LogisticRegression
# 使用KNN与Logistic回归两种方法
from sklearn.datasets import load_digits
digits=load_digits()
digits
data=digits['data']
target=digits['target']
feature_names=digits['feature_names']
target_names=digits['target_names']
imges=digits['images']
data.shape
imges.shape
pd.Series(target).unique()
feature_names
#划分数据集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2)
#使用逻辑回归
#创建模型,训练和预测
# C=1.0 :  越大表示越严格,对训练数据拟合更好,可能导致过拟合
#          越小表示不严格,对训练数据拟合不好,可能导致欠拟合
#
# solver : 逻辑回归的损失函数的一种进行优化的算法
#      {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'},
#    solver='lbfgs' 默认值
#    liblinear:一般适用于小数据集
#    sag,saga: 一般使用于大数据集,速度更快
#    其他是中等数据集
# 
#  max_iter=100: 最大迭代次数
#  
#  n_jobs=-1  表示使用的CPU核数,多进程处理,一般设置为CPU核数,-1表示时使用所有处理器
lr=LogisticRegression(C=1.0,solver='lbfgs',max_iter=100,n_jobs=-1)
#训练
%timeit lr.fit(x_train,y_train)
# 预测
%timeit lr.predict(x_test)
# 得分
lr.score(x_train,y_train)
lr.score(x_test,y_test)
# 导包使用datasets.make_blobs创建一系列点
#from sklearn.datasets import make_blobs
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_blobs
# n_samples=100,  样本数,行数
# n_features=2,   特征数,列数
# centers=None,  几堆点,默认是3
# cluster_std=1.0,  离散程度
data,target=make_blobs(n_samples=300,centers=4,cluster_std=1.0)
plt.scatter(data[:,0],data[:,1],c=target)
#设置三个中心点,随机创建100个点
#创建机器学习模型(逻辑斯蒂回归),训练数据
lr=LogisticRegression(max_iter=10000)  
lr.fit(data,target)
lr.score(data,target)
#分类后,并绘制边界图
x=np.array([1,2,3,4])
y=np.array([5,6,7,8,9])
X, Y = np.meshgrid(x, y)
# 让X,Y相交
XY=np.c_[X.reshape(-1),Y.reshape(-1)]
#  分别对x轴和y轴的数据等分成1000份
#  分别对x轴和y轴的数据等分成1000份
x = np.linspace(data[:, 0].min(), data[:, 0].max(), 1000)
y = np.linspace(data[:, 1].min(), data[:, 1].max(), 1000)X, Y = np.meshgrid(x, y)# ravel(): 扁平化
XY = np.c_[X.ravel(), Y.ravel()]
XY.shape
# 提供测试数据: XY
y_pred=lr.predict(XY)
y_pred.shape
# 画边界图
plt.pcolormesh(X,Y,y_pred.reshape(1000,1000))
plt.scatter(data[:,0],data[:,1],c=target,cmap='rainbow')

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2778666.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2024刘谦春晚第二个扑克牌魔术

前言 就是刚才看春晚感觉这个很神奇,虽然第一个咱模仿不过来,第二个全国人民这么多人,包括全场观众都有成功,这肯定是不需要什么技术,那我觉得这个肯定就是数学了,于是我就胡乱分析一通。 正文 首先准备…

Mysql Day04

mysql体系结构 连接层服务层引擎层(索引)存储层 存储引擎 存储引擎是基于表建立的,默认是innoDB show create table tb; 查看当前数据库支持的存储引擎 show engines; InnoDB 特点 DML(数据增删改)遵循ACID模…

MongoDB的分片集群(二) :mongodb4.x分片集群离线搭建开启安全认证

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 相关文章: MongoDB的分片集群(一) : 基础知识 在《MongoDB的分片集群(一) : 基础知识》中梳理了分片集群的基础知识…

opencv计算机视觉

树莓派主机的无键盘解决 进入控制面板,更改适配器设置,WIFI属性,勾选 1.将网线两头分别接入树莓派和笔记本的网线接口 2.在无线连接属性那里勾选允许其他用户连接 3.运行cmd使用arp -a查看树莓派ip地址,或者使用ipscanner查看 cmd…

JavaIO读取C101.txt文件

一、split分割带空格的字符串(四种方法及其区别) 参考:https://blog.csdn.net/yezonghui/article/details/106455940 String str "a b c d";String[] arr1 str.split(" "); //仅分割一个空格 String[] arr2 str…

c++之说_11|自定义类型 enum(枚举)与enumclass (c11新枚举)

至于枚举 会用就行 至少目前我感觉没什么太多问题 enum 被称为无作用域枚举 , enumclass / enumstruct 被称为有作用域枚举 看到了吧 语法规则 和 struct 差不多 只不过枚举成员 只是一个标志 它本质是数值 从上到下 下面的数根据上面的数 加 1 也可以直接…

前端JavaScript篇之对闭包的理解

目录 对闭包的理解用途循环中使用闭包解决 var 定义函数的问题 对闭包的理解 闭包是指一个函数能够访问并操作其词法作用域(定义时所在的作用域)之外的变量的能力。它可以通过在一个函数内部创建另一个函数来实现。内部函数可以访问外部函数的局部变量、…

【维生素C语言】附录:strlen 函数详解

写在前面:本篇将专门为 strlen 函数进行讲解,总结了模拟实现 strlen 函数的三种方法,并对其进行详细的解析。手写库函数是较为常见的面试题,希望通过本篇博客能够加深大家对 strlen 的理解。 0x00 strlen函数介绍 【百度百科】str…

Cobalt Strike 的使用及拓展

Cobalt Strike是一款以Metasploit为基础的GUI框架式渗透测试工具,集成了端 口转发、服务扫描、 自动化溢出、多模式端口监听、exe 、PowerShell木马生成 等,主要用于团队作战,能让多个渗透者同时连接到团体服务器上,共享渗透资 源…

Leetcode2560. 打家劫舍 IV

Every day a Leetcode 题目来源:2560. 打家劫舍 IV 解法1:二分答案 动态规划 给定数组 nums,从中选择一个长度至少为 k 的子序列 A,要求 A 中没有任何元素在 nums 中是相邻的。 最小化 max⁡(A)。 看到「最大化最小值」或者…

基于vue+node.js的校园跳蚤市场系统多商家

校园跳蚤市场系统可以在短时间内完成大量的数据处理、帮助用户快速的查找校园跳蚤市场相关信息,实现的效益更加直观。校园跳蚤市场系统中采用nodejs技术和mysql数据库。主要包括管理员、发布者和用户三大部分,主要功能是实现对个人中心、用户管理、发布者…

数据分析基础之《pandas(7)—高级处理2》

四、合并 如果数据由多张表组成,那么有时候需要将不同的内容合并在一起分析 1、先回忆下numpy中如何合并 水平拼接 np.hstack() 竖直拼接 np.vstack() 两个都能实现 np.concatenate((a, b), axis) 2、pd.concat([data1, data2], axis1) 按照行或者列…

【Opencv学习】04-图像加法

文章目录 前言一、图像加法混合1.1 代码1.2 运行结果 二、图像的按位运算-组合相加2.1 代码2.2 运行结果示例:PPT平滑切换运行结果 总结 前言 简单说就是介绍了两张图如何组合在一起。 1、混合,透明度和颜色会发生改变 2、组合,叠加起来。可…

大厂的供应链域数据中台设计

关注我,紧跟本系列专栏文章,咱们下篇再续! 作者简介:魔都技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主,编程严选网创始人。具有丰富的引领团队经验,深厚业务架…

2/10 BFS初探

其实在我看来解决全排列问题&#xff0c;核心还是顺序&#xff0c;想清楚结束条件&#xff0c;然后输出&#xff0c;以n3为例 #include<iostream> using namespace std; const int N 10; int path[N];//保存序列 int state[N];//数字是否被用过 int n; void dfs(int u) …

FPGA_工程_基于rom的vga显示

一 框图 二 代码修改 module Display #(parameter H_DISP 1280,parameter V_DISP 1024,parameter H_lcd 12d150,parameter V_lcd 12d150,parameter LCD_SIZE 15d10_000 ) ( input wire clk, input wire rst_n, input wire [11:0] lcd_xpos, //lcd horizontal coo…

C++面向对象 Part 2

文章目录 类六个默认存在的成员函数构造函数&#xff1a;析构函数&#xff1a;拷贝构造函数:拷贝构造详解及细节&#xff1a; 赋值运算符重载;取地址及const取地址操作符重载const修饰的含义&#xff1a; 类六个默认存在的成员函数 构造函数 析构函数 拷贝构造函数 赋值运算…

【从Python基础到深度学习】3. Winscp与Ubuntu使用及配置

一、Ubuntu的使用 1.1 开启与关闭 1.2 修改Ubuntu分辨率 选择适合自己电脑大小的分辨率 1.3 Ubuntu终端 1.4 网络测试 终端中输入&#xff1a; ping www.baidu.com ctr C 退出ping命令 1.5 下载软件 连通安装源 sudo apt update 安装 ssh vim sudo apt install ss…

Verilog刷题笔记22

题目&#xff1a; Build a priority encoder for 8-bit inputs. Given an 8-bit vector, the output should report the first (least significant) bit in the vector that is 1. Report zero if the input vector has no bits that are high. For example, the input 8’b100…

使用耳机壳UV树脂制作一个耳机壳需要多长时间?

使用耳机壳UV树脂制作一个耳机壳所需的时间取决于多个因素&#xff0c;包括工艺流程、加工方式、设备和技术水平等。一般来说&#xff0c;制作一个耳机壳需要数小时到数天不等。 以下是影响制作时间的几个主要因素&#xff1a; 获取耳模时间&#xff1a;获取耳模的时间取决于…