欢迎大家来到IT世界,在知识的湖畔探索吧!
欢迎大家来到IT世界,在知识的湖畔探索吧!
当我们谈论机器学习时,常见的算法——线性回归、决策树和神经网络——往往会成为焦点。但除了这些众所周知的模型之外,还有一些鲜为人知但功能强大的算法,它们可以以惊人的效率应对独特的挑战。在本文中,我们将探讨一些最被低估但非常有用的机器学习算法,这些算法值得在您的工具包中占有一席之地。
1.符号回归Symbolic Regression
与假设预定义方程的传统回归模型不同,符号回归可以发现与数据拟合的最佳数学表达式。简而言之:它不是假设
符号回归发现实际的基本方程是
它使用遗传编程,通过突变和交叉(类似于自然选择)在几代中进化模型。
# !pip install gplearn import numpy as np import matplotlib.pyplot as plt from gplearn.genetic import SymbolicRegressor # 生成样本数据 X = np.linspace(- 10 , 10 , 100 ).reshape(- 1 , 1 ) y = 3 *np.sin(X).ravel() + 2 *X.ravel() 2 - 4 # 初始化符号回归量 sr = SymbolicRegressor(population_size= 2000 , generations= 20 , stopping_criteria= 0.01 , function_set=( 'add' , 'sub' , 'mul' , 'div' , ' sin ' , 'cos' , 'sqrt' , 'log' ), p_crossover= 0.7 , random_state= 42 ) # 拟合模型 sr.fit(X, y) # 进行预测 y_pred = sr.predict(X) # plt.scatter(X, y, color= 'black' , label= 'True Data' ) plt.plot(X, y_pred, color= 'red' , label= 'Discovered Function' ) plt.legend() plt.show()
欢迎大家来到IT世界,在知识的湖畔探索吧!
看看符号回归对样本数据的拟合效果如何
您可以在哪里使用它?
- 预测物理定律:如果您有物理实验的数据,符号回归可以重新发现原始的物理定律。
- 股票市场预测:它可以推导出一个方程来模拟股票价格。
- 医学研究:可以发现药物与病人康复之间的关系。
- 数据科学竞赛:这是 Kaggle 竞赛中的一颗隐藏的宝石!
2. 孤立森林Isolation Forest(iForest)
它是一种基于树的异常检测算法,可以比通常的聚类或基于密度的方法(如 DBSCAN 或 One-Class SVM)更快地隔离异常值。它不是分析正常数据,而是根据点在随机分区空间中突出的速度主动隔离异常值。
它在高维数据上运行良好,并且不需要标记数据,这使其适合无监督学习。
欢迎大家来到IT世界,在知识的湖畔探索吧!import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import IsolationForest # 生成合成数据(正常数据) rng = np.random.RandomState( 42 ) X = 0.3 * rng.randn( 100 , 2 ) # 100 个正常点 # 添加一些异常(异常值) X_outliers = rng.uniform(low=- 4 , high= 4 , size=( 10 , 2 )) # 10 个异常值 # 结合正常数据和异常值 X = np.vstack([X, X_outliers]) iso_forest = IsolationForest(n_estimators= 100 , contamination= 0.1 , random_state= 42 ) y_pred = iso_forest.fit_predict(X) plt.scatter(X[:, 0 ], X[:, 1 ], c=y_pred, cmap= 'coolwarm' , edgecolors= 'k' ) plt.xlabel( "特征 1" ) plt.ylabel( "特征 2" ) plt.title( "孤立森林异常检测" ) plt.show()
异常值以蓝色表示。
何时使用?
- 识别欺诈性信用卡交易。
- 检测网络入侵或恶意软件活动。
- 在质量控制中发现缺陷产品。
- 检测罕见疾病或健康数据异常。
- 标记异常的股票市场活动以检测内幕交易。
3. Tsetlin Machine
Tsetlin Machine (TM)算法由Granmo 于 2018 年首次推出,它基于Tsetlin Automaton (TA)构建。与传统模型不同,它利用命题逻辑来检测复杂的模式,通过奖励和惩罚机制进行学习,从而完善其决策过程。
TM 的主要优势之一是其内存占用低且学习速度快,这使得它们非常高效,同时在基准数据集上提供具有竞争力的预测性能。此外,它们的简单性使其能够在低功耗硬件上无缝实现,使其成为节能 AI 应用的理想选择。
主要特点 —
- 所需的计算量比深度学习模型少得多。
- 易于解释,因为它生成人类可读的规则而不是复杂的方程式。
- 它最适合构建小规模人工智能系统。
您可以在他们的Github 存储库和这篇研究论文中找到有关该算法的详细信息。
4. Random Kitchen Sinks(RKS)
支持向量机 (SVM) 和高斯过程等核方法功能强大,但由于核计算成本高昂,它们难以处理大型数据集。随机厨房水槽 (RKS)是一种巧妙的技巧,可以有效地近似核函数,使这些方法具有可扩展性。
RKS不会显式计算核函数(计算量可能很大),而是使用随机傅里叶特征将数据投影到更高维的特征空间中。这使模型无需大量计算即可近似非线性决策边界。
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_moons from sklearn.kernel_approximation import RBFSampler # Generate a non-linearly separable dataset X, y = make_moons(n_samples=1000, noise=0.2, random_state=42) # Apply Random Kitchen Sinks (RKS) for kernel approximation rks = RBFSampler(gamma=1.0, n_components=500, random_state=42) X_rks = rks.fit_transform(X) # Visualizing the transformed feature space using PCA from sklearn.decomposition import PCA pca = PCA(n_components=2) X_pca = pca.fit_transform(X_rks) plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, edgecolors='k', alpha=0.6) plt.title("Data Transformed by Random Kitchen Sinks (RKS)") plt.xlabel("Principal Component 1") plt.ylabel("Principal Component 2") plt.show() print("Original Data Shape:", X.shape) print("Transformed Data Shape (RKS Features):", X_rks.shape)
您可以在哪里使用它?
- 加速大型数据集上的 SVM 和核回归。
- 有效地近似 RBF(径向基函数)核以实现可扩展学习。
- 减少非线性模型的内存和计算成本。
5.贝叶斯优化Bayesian Optimization
贝叶斯优化是一种顺序的、概率的方法,用于优化昂贵的函数,例如深度学习或机器学习模型中的超参数调整。
贝叶斯优化不是盲目测试不同的参数值(如网格搜索或随机搜索),而是使用概率模型(如高斯过程)对目标函数进行建模,并智能地选择最有希望的值。
适用场合:
- 超参数调整——比网格搜索/随机搜索更有效。
- A/B 测试——在不浪费资源的情况下找到最佳变体。
- 自动化机器学习 (AutoML) — 为 Google 的 AutoML 等工具提供支持。
欢迎大家来到IT世界,在知识的湖畔探索吧!import numpy as np from bayes_opt import BayesianOptimization # 定义一个目标函数(例如,优化 x^2 * sin(x)) def objective_function ( x ): return -(x 2 * np.sin(x)) # 我们的目标是最大化,所以我们对它取反 # 定义参数界限 param_bounds = { 'x' : (- 5 , 5 )} # 初始化贝叶斯优化器 optimizer = BayesianOptimization( f=objective_function, # 要优化的函数 pbounds=param_bounds, # 参数空间 random_state= 42 ) # 运行优化 optimizer.maximize(init_points= 5 , n_iter= 20 ) # 找到最佳参数 print ( "最佳参数:" , optimizer. max )
6. Hopfield 网络
Hopfield 网络是一种循环神经网络 (RNN),它通过在内存中存储二进制模式来 专门进行模式识别和纠错。当给出新的输入时,它会识别并检索最接近的存储模式,即使输入不完整或有噪声。这种能力称为自动关联,使网络能够从部分或损坏的输入中重建完整的模式。例如,如果对图像进行训练,即使部分缺失或扭曲,它也可以识别和恢复它们。
您可以通过此Google Colab Notebook找到 Hopefield Networks 的 Python 实现,或者通过此应用程序使用您自己的模式进行尝试。
适用场合:
- 记忆回忆系统——它对于恢复损坏的图像或填充丢失的数据很有用。
- 错误校正——用于电信领域,纠正传输错误。
- 神经科学模拟——模拟人类记忆过程。
7. 自组织映射Self-Organizing Maps(SOM)
自组织映射 (SOM)是一种神经网络,它使用无监督学习在低维(通常是 2D)网格中组织和可视化高维数据。与依赖错误校正(如反向传播)的传统神经网络不同,SOM 使用竞争学习– 神经元竞争来表示输入模式。
SOM 的一个关键特性是其邻域函数,它有助于维护数据中的原始结构和关系。这使得它们特别适用于聚类、模式识别和数据探索。
适用场合:
- 市场细分——识别不同的客户群。
- 医疗诊断——聚集患者症状以检测疾病。
- 异常检测——检测制造中的欺诈或缺陷。
import numpy as np import matplotlib.pyplot as plt import seaborn as sns import pandas as pd from minisom import MiniSom from tensorflow.keras.datasets import mnist # Choose dataset: 'mnist', 'wine', 'customers' DATASET = "mnist" # Change to 'wine' or 'customers' for different datasets # Load dataset if DATASET == "mnist": (X_train, y_train), _ = mnist.load_data() X_train = X_train.reshape(X_train.shape[0], -1) / 255.0 # Flatten and normalize X_train, y_train = X_train[:1000], y_train[:1000] # Use subset for faster training elif DATASET == "wine": df = sns.load_dataset("wine_quality") X_train = df.drop(columns=["quality"]).values X_train = X_train / np.linalg.norm(X_train, axis=1, keepdims=True) # Normalize y_train = df["quality"].values elif DATASET == "customers": url = "https://raw.githubusercontent.com/MachineLearningWithPython/datasets/main/Mall_Customers.csv" df = pd.read_csv(url) X_train = df[["Annual Income (k$)", "Spending Score (1-100)"]].values X_train = X_train / np.linalg.norm(X_train, axis=1, keepdims=True) y_train = None # No predefined labels # Initialize and train SOM som_size = (10, 10) som = MiniSom(som_size[0], som_size[1], X_train.shape[1], sigma=1.0, learning_rate=0.5) som.random_weights_init(X_train) som.train_random(X_train, 1000) # Create activity heatmap activation_map = np.zeros(som_size) for x in X_train: winner = som.winner(x) activation_map[winner] += 1 plt.figure(figsize=(10, 8)) plt.imshow(activation_map.T, cmap="coolwarm", origin="lower", alpha=0.7) plt.colorbar(label="Neuron Activation Frequency") # Overlay Data Points for i, x in enumerate(X_train): winner = som.winner(x) label = str(y_train[i]) if y_train is not None else "•" plt.text(winner[0], winner[1], label, color="black", fontsize=8, ha="center", va="center", bbox=dict(facecolor="white", edgecolor="black", boxstyle="round,pad=0.3")) plt.title(f"SOM Clustering - {DATASET.upper()} Dataset") plt.xticks(range(som_size[0])) plt.yticks(range(som_size[1])) plt.grid(color="black", linestyle="--", linewidth=0.5) plt.show()
8. Field-Aware Factorization Machines(FFM)
场感知分解机(FFM)是分解机(FM)的扩展,专为高维稀疏数据而设计——常见于推荐系统和在线广告(CTR 预测)。
在标准分解机 (FM)中,每个特征都有一个潜在向量,用于与所有其他特征交互。在FFM中,每个特征都有多个潜在向量,每个字段(特征组)一个。这种字段感知能力使 FFM 能够更好地模拟不同特征组之间的交互
FFMs 模型如下:
适用场合:
- 推荐系统——Netflix、YouTube 和 Amazon 使用。
- 广告——预测用户可能点击哪些广告。
- 电子商务——根据用户行为改进产品建议。
9.Conditional Random Fields(CRF)
条件随机场 (CRF) 是用于结构化预测的概率模型。与进行独立预测的传统分类器不同,CRF 会考虑上下文,这使其适用于序列数据。
条件随机场结构[来源]
欢迎大家来到IT世界,在知识的湖畔探索吧!import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix from sklearn_crfsuite import CRF, metrics from sklearn.model_selection import train_test_split # Sample dataset (Simplified NER-like format) X = [[{'word': 'John'}, {'word': 'loves'}, {'word': 'Python'}], [{'word': 'Alice'}, {'word': 'codes'}, {'word': 'in'}, {'word': 'Java'}]] y = [['B-PER', 'O', 'B-LANG'], # Named Entity Recognition (NER) Labels ['B-PER', 'O', 'O', 'B-LANG']] # Split data X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=42) # Define CRF model crf = CRF(algorithm='lbfgs', max_iterations=50) crf.fit(X_train, y_train) # Make predictions y_pred = crf.predict(X_test) # Flatten lists for confusion matrix y_test_flat = [label for seq in y_test for label in seq] y_pred_flat = [label for seq in y_pred for label in seq] # Get unique labels labels = list(set(y_test_flat + y_pred_flat)) # Compute confusion matrix conf_matrix = confusion_matrix(y_test_flat, y_pred_flat, labels=labels) # Plot heatmap plt.figure(figsize=(6, 5)) sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues", xticklabels=labels, yticklabels=labels) plt.title("Confusion Matrix for CRF Predictions") plt.xlabel("Predicted Label") plt.ylabel("True Label") plt.show()
10.Extreme Learning Machines(ELM)
极限学习机 (ELM) 是一种前馈神经网络,通过随机初始化隐藏层权重并仅学习输出权重来实现极快的训练速度。与传统神经网络不同,ELM不使用反向传播,因此训练速度明显更快。
单隐层前馈神经网络
何时使用 ELM?
- 当你需要快速的训练速度时(与深度学习相比)。
- 用于具有大型数据集的分类和回归任务。
- 当浅模型(单个隐藏层)就足够时。
- 当您不需要对隐藏层权重进行微调时。
import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import confusion_matrix, accuracy_score import hpelm # High-Performance ELM # Load dataset iris = datasets.load_iris() X, y = iris.data, iris.target # Normalize features scaler = StandardScaler() X = scaler.fit_transform(X) # Split dataset X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Convert labels to one-hot encoding (for ELM) y_train_onehot = np.eye(len(set(y)))[y_train] y_test_onehot = np.eye(len(set(y)))[y_test] # Define and Train ELM elm = hpelm.ELM(X_train.shape[1], y_train_onehot.shape[1]) elm.add_neurons(50, "sigm") # 50 hidden neurons with sigmoid activation elm.train(X_train, y_train_onehot, "c") # 'c' for classification # Make predictions y_pred = elm.predict(X_test) y_pred_classes = np.argmax(y_pred, axis=1) # Evaluate model accuracy = accuracy_score(y_test, y_pred_classes) print(f"Accuracy: {accuracy:.2f}") # Compute confusion matrix cm = confusion_matrix(y_test, y_pred_classes) cm_percentage = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] # Normalize # Create the figure plt.figure(figsize=(7, 5)) sns.heatmap(cm_percentage, annot=True, fmt=".2%", cmap="coolwarm", linewidths=2, xticklabels=iris.target_names, yticklabels=iris.target_names) # Improve readability plt.xlabel("Predicted Label", fontsize=12) plt.ylabel("True Label", fontsize=12) plt.title("ELM Confusion Matrix (Normalized)", fontsize=14) plt.show()
Bonus: Variational Autoencoder(VAE)
变分自动编码器 (VAE) 是一种生成式深度学习模型,旨在学习输入数据的潜在表示并生成与训练数据相似的新数据样本。与标准自动编码器不同,VAE 通过学习概率潜在空间引入随机性,其中编码器输出均值 (μ) 和方差 (σ) 而不是固定表示。
在训练过程中,从这些分布中抽取随机潜在向量,以通过解码器生成不同的输出。这使得 VAE 在图像生成、数据增强、异常检测和潜在空间探索等任务中非常有效。
变分自动编码器(VAE)架构
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/127141.html