目录
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)