Bootstrap

机器学习基础07

目录

1.逻辑回归

1.1原理

1.2API

2.K-Means

2.1算法过程

2.2API

3.SVM(支持向量机)

3.1算法原理​

3.2API 


1.逻辑回归

逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法。

1.1原理

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

 Sigmoid函数:

损失函数:

构建过程,若有: 

 然后使用梯度下降算法,减少损失函数的值,更新逻辑回归前面对应算法的权重参数(回归计算W),提升原本属于1类别的概率,降低原本是0类别的概率。

1.2API

sklearn.linear_model.LogisticRegression()

参数:

  • fit_intercept :

default=True 指定是否计算截距

  • max_iter :

int, default=100  最大迭代次数。迭代达到此数目后,即使未收敛也会停止。

import numpy as np 
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

x,y = load_iris(return_X_y=True)

# iris数据集是三分类,将类别2剔除
x=x[y!=2]
y=y[y!=2]

x_train,x_test,y_train,y_test =train_test_split(x,y,train_size=0.5,random_state=10)

# 逻辑回归模型
model = LogisticRegression()

model.fit(x_train,y_train)

print(model.coef_)
print(model.intercept_)

y_predict = model.predict(x_test)
print(y_predict)

2.K-Means

K-Means是无监督的聚类算法。

2.1算法过程

第一步:设定簇数n和初始化质心(centroids)的位置。

第二步:计算所有样本与所有质心的距离,样本属于与距离最短的质心代表的簇。

第三步:根据每个簇的样本,更新质心的位置为簇的中心点,重复第二步直到所有质心不变。

2.2API

from sklearn.cluster import KMeans

参数:

  • n_clusters: int, default=8 要形成的簇的数量。
  • init: {'k-means++', 'random'} or ndarray, default='k-means++'

初始化方法。'k-means++' 可以帮助提高收敛速度并减少陷入局部最小值的风险;'random' 表示随机选择初始质心;也可以提供一个形状为 (n_clusters, n_features) 的数组作为初始质心的位置。

  • n_init: int, default=10

当初始化方法为 'k-means++' 或 'random' 时,算法会运行多次,每次使用不同的随机质心初始化。

  • max_iter: int, default=300

单次运行的最大迭代次数。如果在达到最大迭代次数之前已经收敛,则提前终止。

  • tol: float, default=1e-4

相对于惯性的绝对公差值,用于判断是否收敛。

  • verbose: int, default=0

日志详细程度。0表示不输出任何信息,大于0的值会输出更多调试信息。

  • random_state: int, RandomState instance or None, default=None

用于初始化质心的随机数生成器的状态。如果设置为整数,可以确保每次运行结果的一致性。

  • copy_x: bool, default=True

是否复制输入数据。如果设置为 False,可能会修改原始输入数据。

  • algorithm: {"lloyd", "elkan", "auto", "full"}, default="auto"

使用的计算算法。"lloyd" 和 "elkan" 是两种不同的优化算法,"auto" 会自动选择最合适的算法。

属性:

  • cluster_centers_:

每个簇的中心点坐标。

  • labels_:

每个训练样本所属的簇标签。

  • inertia_:

所有样本到其最近质心的平方距离之和,也称为“簇内平方和”,是评估聚类效果的一个重要指标。

  • n_iter_:

实际运行的迭代次数。

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt

# 创建一个随机数据集, 100个样本,每个样本有2个特征
x = np.random.rand(100,2)

# 初始化KMeans模型
kmeans = KMeans(n_clusters =3)

# 拟合数据
kmeans.fit(x)

# 获取每个样本所属的簇
labels = kmeans.labels_
# 获取每个簇的中心点
centroids =kmeans.cluster_centers_

print('Labels',labels)
print('Centroids:',centroids)

# 可视化结果
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
plt.scatter(centroids[:,0],centroids[:,1],c='red',s=200,alpha=0.75)
plt.title('K-Means Clustering')
plt.show()

3.SVM(支持向量机)

SVM是监督学习的分类算法。
 

3.1算法原理

3.2API 

from sklearn.svm import SVC

参数:

  • C: float, default=1.0

惩罚参数,控制错误项的惩罚程度。较大会减少错误分类的数量,但可能导致过拟合。

  • kernel: {'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'}, default='rbf'

内核类型,用于算法中的非线性映射。常见的内核有:
        'linear': 线性核。
        'poly': 多项式核。
        'rbf': 径向基函数(高斯核),默认值。
        'sigmoid': Sigmoid 核。
        'precomputed': 预计算核矩阵。

  • degree: int, default=3

当使用多项式核 (kernel='poly') 时,表示多项式的次数。

  • gamma: {'scale', 'auto'} or float, default='scale'

RBF、多项式和 Sigmoid 核的系数。

  • coef0: float, default=0.0

核函数中的独立项。对于多项式 (kernel='poly') 和 Sigmoid (kernel='sigmoid') 核有效。

  • probability: bool, default=False

是否启用概率估计。这需要额外的时间和内存来训练模型,但可以使用 predict_proba 方法获得概率估计。

  • tol: float, default=1e-3

停止标准的容忍度。

  • cache_size: float, default=200

内存缓存大小(以 MB 为单位),用于存储内核矩阵。

  • class_weight: dict or 'balanced', default=None

类权重。如果设置为 'balanced',则类权重将自动调整为与输入数据中的类频率成反比。

  • verbose: bool, default=False

是否启用详细输出。

  • max_iter: int, default=-1

最大迭代次数。如果设置为正数,则限制迭代次数;如果设置为 -1,则没有限制。

  • decision_function_shape: {'ovo', 'ovr'}, default='ovr'

决策函数的形状。'ovo' 表示一对一(one-vs-one),'ovr' 表示一对多(one-vs-rest)。

  • break_ties: bool, default=False

在多类分类中,是否在预测时打破平局。仅当 decision_function_shape='ovr' 且 probability=True 时有效。

  • random_state: int, RandomState instance or None, default=None

随机数生成器的种子或实例。用于概率估计和随机解法器。

from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split 

x,y=load_breast_cancer(return_X_y=True)

x_train,x_test,y_train,y_test =train_test_split(x,y,train_size=0.5,random_state=10)

model = SVC()
model.fit(x_train,y_train)

score = model.score(x_test,y_test)
print(score)

;