当前位置: 首页 > news >正文

人工智能-机器学习day5

一、逻辑回归

逻辑回归是一种基于概率的分类算法,虽然名称包含"回归",但实际解决的是分类问题。其核心思想是通过线性组合特征值,再经过sigmoid函数映射到[0,1]区间,得到样本属于某个类别的概率。

1、原理

逻辑回归的输入是线性回归的输出

线性回归: h(w)=w_1x_1+w_2x_2+....+b

sigmoid激活函数 :f(x)=\frac{1}{1+e^{-x}}

sigmoid函数的值是在[0,1]区间中的一个概率值,默认为0.5为阈值可以自己设定,大于0.5认为是正例,小于则认为是负例

把上面的h(w) 线性的输出再输入到sigmoid函数当中 f(w)=\frac{1}{1+e^{-h(w)}}

损失函数:

  • 当y=1时,我们希望h\theta(x) 值越大越好

  • 当y=0时,我们希望h\theta(x) 值越小越好

  • 凸函数:保证梯度下降能找到全局最优解

综合可得:

2、API

sklearn.linear_model.LogisticRegression
class sklearn.linear_model.LogisticRegression(penalty='l2', # 正则化项*,dual=False,# 是否使用对偶问题tol=0.0001,# 停止迭代的误差阈值C=1.0,# 正则化强度fit_intercept=True,# 是否计算截距intercept_scaling=1,# 截距缩放class_weight=None,# 权重random_state=None,# 随机数种子solver='lbfgs',# 优化算法max_iter=100,# 最大迭代次数multi_class='auto',# 多分类问题verbose=0,# 输出信息warm_start=False,n_jobs=None,l1_ratio=None# L1正则化
)

关键参数:

参数类型/选项默认值说明
penalty{'l1', 'l2', 'elasticnet', None}'l2'正则化类型: - 'l1': L1正则化(特征选择) - 'l2': L2正则化(默认) - 'elasticnet': L1和L2混合 - None: 无正则化
Cfloat1.0正则化强度的倒数(越小表示正则化越强)
fit_interceptboolTrue是否计算截距项(偏置)
max_iterint100最大迭代次数(优化算法停止条件之一)
solver{'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}'lbfgs'优化算法: - 'liblinear': 小数据集首选 - 'lbfgs': 中等数据集(默认) - 'sag'/'saga': 大数据集 - 'newton-cg': 多分类问题
class_weightdict, 'balanced' or NoneNone类别权重: - None: 所有类权重为1 - 'balanced': 自动调整权重与类别频率成反比 - dict: 自定义权重(如{0:0.6, 1:0.4})
random_stateint, RandomState instanceNone随机种子(用于'sag'、'saga'和'liblinear')
multi_class{'auto', 'ovr', 'multinomial'}'auto'多分类策略: - 'ovr': 一对多 - 'multinomial': 多项损失(softmax) - 'auto': 根据数据自动选择
l1_ratiofloatNoneElasticNet混合比例(0≤l1_ratio≤1) - 仅当penalty='elasticnet'时有效
tolfloat1e-4优化算法的停止容差
warm_startboolFalse是否重用前一次调用的解决方案
n_jobsintNone并行计算的核心数(-1表示使用所有核心)
方法说明
fit(X, y[, sample_weight])训练逻辑回归模型
predict(X)预测类别标签
predict_proba(X)预测类别概率(返回形状:(n_samples, n_classes))
predict_log_proba(X)预测类别概率的对数
score(X, y[, sample_weight])返回预测的准确率
decision_function(X)预测样本的置信度分数
get_params([deep])获取模型参数
set_params(**params)设置模型参数

编写代码思路参考:

1、加载数据

2、二分类

3、数据集划分

4、创建逻辑回归模型

5、训练

6、输出训练结果

7、预测

8、评估

示例代码:

#逻辑回归
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
​
#1.加载数据集
iris = load_iris()
X, y = iris.data, iris.target
#2.数据集划分   
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=22)
#3.创建逻辑回归模型
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
#4.预测
score=model.score(X_test,y_test)
print(score)      
x_new=[[5,5,4,2],[1,1,4,3]]
y_predict = model.predict(x_new)
y_por=model.predict_proba(x_new)
print(y_predict)
print(y_por)
print(model.coef_)
print(model.intercept_)
​
# 输出:
# 0.9333333333333333
# [1 2]
# [[0.42002736 0.42386003 0.15611261]
#  [0.00245963 0.02005505 0.97748532]]
# [[-0.40112983  0.90486156 -2.34899221 -1.00643945]
#  [ 0.50868795 -0.46199865 -0.18937899 -0.74522366]
#  [-0.10755813 -0.44286291  2.5383712   1.75166311]]
# [  9.21707535   2.35048644 -11.56756179]

二、无监督学习 - K-means算法

1、无监督学习

无监督学习(Unsupervised Learning)计算机根据样本的特征或相关性,实现从样本数据中训练出相应的预测模型

1.无监督学习核心概念
  • 核心定义:从无标签数据中自动发现隐藏模式和结构

  • 核心任务:聚类、降维、异常检测等

  • 关键特点

    • 只需特征矩阵 X,无需标签 y

    • 算法自主识别数据内在结构

    • 适用于探索性数据分析和特征发现

2. 聚类算法本质
  • 目标:将数据划分为有意义的簇(group)

  • 核心原则:簇内差异小,簇外差异大

  • 评估指标:样本点到簇质心的距离

  • VS 分类算法

    • 聚类:无预定义标签,发现未知分组

    • 分类:有预定义标签,预测已知类别

在这里插入图片描述

2、K - means算法

  • K-means 是一种流行的聚类算法,主要用于无监督学习中对未标记的数据进行分类。该算法的目标是将数据集中的样本划分为K个簇,使得簇内的样本彼此之间的差异最小化。这种差异通常通过簇内所有点到该簇中心点的距离平方和来衡量

  • 核心概念

属性含义
Kmeans算法将一组N个样本的特征矩阵X划分为K个无交集的簇,直观上看来簇是一个又一个聚集一起的数据,在一个簇中的数据就认为是同一类,簇就是聚类的结果表现,其中簇的个数是一个超参数
质心每个簇中所有数据的均值u,通常被称为这个簇的"质心",在二维平面中,簇的质心横坐标是横坐标的均值,质心的纵坐标是纵坐标的均值
  • 工作流程

    1. 随机初始化 K 个质心

    2. 将样本分配到最近质心(欧氏距离)

    3. 重新计算质心(簇内均值)

    4. 重复 2-3 步直至质心稳定

K-means 算法 API 详解(基于 scikit-learn)

1. 导入类

python

from sklearn.cluster import KMeans
2. 核心参数
参数类型默认值说明
n_clustersint8要形成的簇数(K值)
initstr'k-means++'初始化方法:'k-means++'(优化初始化)或 'random'(随机初始化)
n_initint10不同质心初始化的运行次数
max_iterint300单次运行的最大迭代次数
random_stateint/NoneNone随机种子(确保结果可复现)
tolfloat1e-4收敛阈值(质心变化的容忍度)
3. 核心属性
属性类型说明
cluster_centers_array聚类中心的坐标 [n_clusters, n_features]
labels_array每个样本的簇标签 [n_samples]
inertia_float样本到最近聚类中心的平方距离总和(簇内平方和)
n_iter_int实际迭代次数

make_blobs方法是 Sklearn 库中 sklearn.datasets 模块提供的一个函数,用于生成一组二维或高维的数据簇。这些数据簇通常用于聚类算法的测试。具体来说:

  • 参数:

    • n_samples 参数指定了生成样本的数量

    • centers 参数定义了数据集中簇的中心数量

    • random_state 参数用于设置随机数生成器的种子,以便在不同运行之间获得相同的结果

  • 返回值:返回一个元组

    • X:一个形状为 (n_samples, n_features) 的数组,表示生成的样本数据。每个样本都是一行,特征列为样本的各个维度坐标

    • y:一个形状为 (n_samples,) 的数组,表示每个样本所属的簇标签(中心索引)。如果不需要这个标签,可以像示例中那样用 _ 忽略它

4. 核心方法

python

# 拟合模型到数据
model.fit(X)
​
# 拟合并返回簇标签(等价于 fit + labels_)
labels = model.fit_predict(X)
​
# 预测新样本所属簇
new_labels = model.predict(new_data)
​
# 转换数据到簇距离空间(返回每个样本到每个质心的距离)
distances = model.transform(X)
5. 完整使用示例

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
data=np.random.randint(0,1000,(1000,2))
# print(data)
# plt.scatter(data[:,0],data[:,1])
# plt.show()
# model.fit(data)
n_class=7
model=KMeans(n_class)
model.fit(data)
# print(model.cluster_centers_)
# print(model.labels_)
# print(model.labels_==0)
# print(data[model.labels_==0])
for i in range(n_class):point=data[model.labels_==i]plt.scatter(point[:,0],point[:,1])
# plt.scatter(model.cluster_centers_[:,0],model.cluster_centers_[:,1])
plt.show()
http://www.dtcms.com/a/424360.html

相关文章:

  • 上海网站建设公司电话做托福的网站
  • 上海建设网站的网站asp网站整站下载器
  • MRFS 消融实验记录
  • 内存条与硬盘全维度解析及2025年选购报告-仅代表个人观点
  • 析构函数,构造函数,赋值构造函数
  • iis5.1 建立网站医院 网站建设
  • port trunk pvid vlan vlan-id 概念及题目
  • 建设工程 法律 网站深圳人才网站建设
  • seo建站是什么意思在哪里找软件开发公司
  • 介绍Python对象类型
  • 随州网站建设哪家好wordpress 外观 自定义 没反应
  • 营销型网站建设 课程广告设计包括哪些方面
  • 西安网站建设哪个平台好安徽六安网
  • 网站顶端大图怎么做sem推广代运营
  • 八年级信息所用软件做网站网站建设怎样才能吸引顾客
  • 安卓基础006-视图
  • 建设标准 免费下载网站html5和h5的区别
  • 【展厅多媒体】大数据分析平台,展厅运营的“智慧眼”
  • 郑州网站建设公司锐客科技上海有名的设计工作室
  • 日期excel导入设置,导入表格实现日期批量打印
  • 再次使用xca软件生成自签证书
  • 【小白入门docker】创建Spring Boot Hello World应用制作Docker镜像并运行
  • 【Redis学习】String字符串
  • 项目实战:ecshop
  • 白城北京网站建设邵阳小学网站建设
  • SpringBoot 的配置文件与日志
  • 物联网技术与应用第三节课笔记
  • 【Java】P10 面向对象编程完全指南(S1-2 基础篇 包管理与导入)
  • C++ 特性 --内部类 模板类中取出来类类型问题
  • ip地址直接访问网站东莞市网络seo推广企业