-
【Python算法】分类与预测——logistic回归分析1.logistic回归定义 logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。 logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。2.操作系统 操作机:Linux_Ubuntu 操作机默认用户:root3.实验工具 Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。 由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。 众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。4.Numpy NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。5.scikit-learn scikit-learn,Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上开放源码,可商业使用 - BSD license。6.Matplotlib Matplotlib 是一个 Python 的 2D绘**,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。7.pandas Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。8.导入所需要的库:numpy,matplotlib.pyplot,pandas代码如下:# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd9.加载数据集代码如下:# Importing the dataset dataset = pd.read_csv('/mnt/dataset_29/Social_Network_Ads_82e4aa0627105a2d22b70d7ad0bfeda0.csv') 注意:数据集以实际位置为准 X = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values注意:实验中以数据集的具体为准。如下给出数据,可将数据创建响相应的数据集用于字日常训练,也可在实验平台中数据集模块下的的“社交网络数据集”中进行查看。数据集如下:(见附件)10.将数据集分割为训练集和测试集代码如下:# Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)11.特征缩放代码如下:# Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)12.使用逻辑回归对数据进行处理代码如下:from sklearn.linear_model import LogisticRegression classifier = LogisticRegression() classifier.fit(X_train, y_train)13.对测试集进行分类代码如下:# Predicting the Test set results y_pred = classifier.predict(X_test)14.制造混淆矩阵评估分类器性能代码如下:from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)15.绘制训练集和测试集绘制训练集数据结果:from matplotlib.colors import ListedColormap X_set,y_set=X_train,y_train X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01), np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(),X1.max()) plt.ylim(X2.min(),X2.max()) for i,j in enumerate(np. unique(y_set)): plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1], c = ListedColormap(('red', 'green'))(i), label=j) plt. title(' LOGISTIC(Training set)') plt. xlabel(' Age') plt. ylabel(' Estimated Salary') plt. legend() plt. show()给测试集数据分类:X_set,y_set=X_test,y_test X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01), np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(),X1.max()) plt.ylim(X2.min(),X2.max()) for i,j in enumerate(np. unique(y_set)): plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1], c = ListedColormap(('red', 'green'))(i), label=j) plt. title(' LOGISTIC(Test set)') plt. xlabel(' Age') plt. ylabel(' Estimated Salary') plt. legend() plt. show()
-
【Python算法】分类与预测——Python随机森林1.随机森林定义 随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务。同时,它也是一种数据降维手段,在处理缺失值、异常值以及其他数据探索等方面,取得了不错的成效。另外,它还担任了集成学习中的重要方法,在将几个低效模型整合为一个高效模型时大显身手。在随机森林中,会生成很多的决策树,当在基于某些属性对一个新的对象进行分类判别时,随机森林中的每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项;而在回归问题中,随机森林的输出将会是所有决策树输出的平均值。2.随机森林的优缺点 该算法的优点主要有以下几个方面: 随机森林算法能解决分类与回归两种类型的问题,并在这两个方面都有相当好的估计表现; 随机森林对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能; 在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性; 当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法; 模型的上述性能可以被扩展运用到未标记的数据集中,用于引导无监督聚类、数据透视和异常检测; 随机森林算法中包含了对输入数据的重复自抽样过程,即所谓的bootstrap抽样。 这样一来,数据集中大约三分之一将没有用于模型的训练而是用于测试,这样的数据被称为out of bag samples,通过这些样本估计的误差被称为out of bag error。研究表明,这种out of bag方法的与测试集规模同训练集一致的估计方法有着相同的精确程度,因此在随机森林中我们无需再对测试集进行另外的设置。该算法的缺点主要有以下几个方面: (1)随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。 (2)当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。 (3)对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子—几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。3.随机森林执行步骤 在随机森林中,每一个决策树“种植”和“生长”的规则如下所示: (1) 假设训练集中的样本个数为N,然后通过有重置的重复多次抽样来获得这N个样 本,这样的抽样结果将作为生成决策树的训练集; (2) 如果有M个输入变量,每个节点都将随机选择m(m<M)个特定的变量,然后运用这m个变量来确定最佳的分裂点。在决策树的生成过程中,m的值是保持不变的; (3) 每棵决策树都最大可能地进行生长而不进行剪枝; (4) 通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时 采用平均)。4.操作系统 操作机:Linux_Ubuntu 操作机默认用户:root5.实验工具 Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。 由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。 众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。6.Numpy NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。7.scikit-learn scikit-learn,Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上开放源码,可商业使用 - BSD license。8.Matplotlib Matplotlib 是一个 Python 的 2D绘**,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。9.pandas Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。10.导入所需要的库:numpy,matplotlib.pyplot,pandas代码如下:# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd11.加载数据集代码如下:# Importing the dataset dataset = pd.read_csv('/mnt/dataset_29/Social_Network_Ads_82e4aa0627105a2d22b70d7ad0bfeda0.csv') 注意:数据集以实际位置为准 X = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values注意:实验中以数据集的具体为准。如下给出数据,可将数据创建响相应的数据集用于字日常训练,也可在实验平台中数据集模块下的的“社交网络数据集”中进行查看。数据集如下:(见附件)12.将数据集分割为训练集和测试集代码如下:# Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)13.特征缩放代码如下:# Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)14.调试训练集的随机森林代码如下:from sklearn.ensemble import RandomForestClassifier classifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0) classifier.fit(X_train, y_train)15.对测试集进行分类代码如下:# Predicting the Test set results y_pred = classifier.predict(X_test)16.制作混淆矩阵来评估模型性能代码如下:# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)17.绘制训练数据分类结果代码如下:# Visualising the Training set results from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Training set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()训练数据分类结果如下:18.绘制测试数据分类结果代码如下:# Visualising the Test set results from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Test set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()
-
【Python算法】分类与预测——支持向量机1.支持向量机定义 在机器学习领域,支持向量机 SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类、以及回归分析。给出一个简单的线性分类问题,要用一条直线,将下图 13.13 中圆形的点和三角形的点分开,这样的直线有无数条,例如图中画出的两条线都能进行分类。这些将类别分离的曲线称为超平面。已有的训练数据中,每个元素距离分离超平面都有一个距离。在添加超平面的时候,尽可能的使最靠近分离超平面的那个元素与超平面的距离变大。这样,加入新的数据的时候,分的准的概率会最大化,这便是 SVM 的主要思想。如下图所示。 最大化间隔的流程主要如下:首先进行归一化,归一化的目的是除掉取值尺度的影响;其次,对所有元素求到超平面的欧氏距离,给定一个超平面 P,计算所有样本与超平面 P 的欧式距离,这其中最小的距离记为DP,SVM 的作用就是找到DP最大的超平面。下图中的虚线画出了最大间隔,那么在这两条虚线上的样本点就称为支持向量。 上面介绍的是线性可分的情形,而在实际中,编程者经常会遇到线性不可分的样例,如下图中的一维数轴上的叉形和菱形点,无法简单地找到一个超平面将其分类。 此时常用的做法是样本特征映射到高维空间去。如果将原始的一维特征空间映射到二维特征空间,那么就可以找到分离超平面,小于0时,就可以判别类别为1。当大于0时,就可以判别类别为0,如下图所示。 线性不可分映射到高维空间,可能会导致维度非常高,计算复杂。核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数事先在低维上进行计算,而将实质上的分类效果表现在高维上,也避免了直接在高维空间中的复杂计算。2.支持向量机优缺点 支持向量机算法的优点主要如下: (1) 在高维空间有效; (2) 在特征维数高于样本数的时候仍然有效; (3) 增、删非支持向量样本对模型没有影响; (4) 有些成功的应用中,SVM 方法对核的选取不敏感。当然,支持向量机算法也存在一些缺陷,例如对于每个高维空间在此空间的映射 F,如何确定 F 映射,现在还没有合适的方法,所以对于一般的问题,SVM 只是把高维空间的复杂性的困难转为了求核函数的困难。而且即使确定核函数以后,在求解问题分类时,也要求解函数的二次规划,这就需要大量的存储空间。这也是 SVM 的一个问题。3.操作系统 操作机:Linux_Ubuntu 操作机默认用户:root4.实验工具 Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。 由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。 众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。5.Numpy NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。6.scikit-learn scikit-learn,Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上开放源码,可商业使用 - BSD license。7.Matplotlib Matplotlib 是一个 Python 的 2D绘**,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。8.pandas Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。9.导入所需要的库:numpy,matplotlib.pyplot,pandas代码如下:# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd10.加载数据集代码如下:# Importing the dataset dataset = pd.read_csv('/mnt/dataset_29/Social_Network_Ads_82e4aa0627105a2d22b70d7ad0bfeda0.csv') 注意:数据集以实际位置为准 X = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values注意:实验中以数据集的具体为准。如下给出数据,可将数据创建响相应的数据集用于字日常训练,也可在实验平台中数据集模块下的的“社交网络数据集”中进行查看。数据集如下:(见附件)11.将数据集分割为训练集和测试集代码如下:# Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)12.特征缩放代码如下:# Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)13.使用Kernel SVM对数据进行处理代码如下:# Fitting Kernel SVM to the Training set from sklearn.svm import SVC classifier = SVC(kernel = 'rbf', random_state = 0) classifier.fit(X_train, y_train)14.对测试集进行分类代码如下:# Predicting the Test set results y_pred = classifier.predict(X_test)15.制作混淆矩阵来评估模型性能代码如下:# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)16.绘制训练数据分类结果# Visualising the Training set results from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Training set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()训练数据分类结果如下:17.绘制测试数据分类结果代码如下:# Visualising the Test set results from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Test set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()测试数据分类结果如下:
-
【Python算法】分类与预测——K近邻分类算法1.K-近邻算法(KNN)概述 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类。但是不可能所有测试对象都会找到一摸一样的训练对象。也出现过将某一个训练对象分类为很多类别的情况。正是因为这些问题的产生,KNN诞生了。 KNN通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 KNN的每个样本所选择的邻居都是已经正确分类的对象。该方法在定类决策上只根据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。如下图,如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。 由此也说明了KNN算法的结果很大程度取决于K的选择。 在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离: 同时,KNN通过依据k个对象中占优的类别进行决策,而不是单一的对象类别决策。这两点就是KNN算法的优势。2.KNN算法的描述 1)计算测试数据与各个训练数据之间的距离; 2)按照距离的递增关系进行排序; 3)选取距离最小的K个点; 4)确定前K个点所在类别的出现频率; 5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。3.操作系统 操作机:Linux_Ubuntu 操作机默认用户:root4.实验工具 Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。 由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。 众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。5.Numpy NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。6.scikit-learn scikit-learn,Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上开放源码,可商业使用 - BSD license。7.Matplotlib Matplotlib 是一个 Python 的 2D绘**,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。8.pandas Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。9.导入所需要的库:numpy,matplotlib.pyplot,pandas代码如下:# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd10.加载数据集代码如下:# Importing the dataset dataset = pd.read_csv('/mnt/dataset_29/Social_Network_Ads_82e4aa0627105a2d22b70d7ad0bfeda0.csv') 注意:数据集以实际位置为准 X = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values注意:实验中以数据集的具体为准。如下给出数据,可将数据创建响相应的数据集用于字日常训练,也可在实验平台中数据集模块下的的“社交网络数据集”中进行查看。数据集如下:(见附件)11.将数据集分割为训练集和测试集代码如下:# Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)12.特征缩放代码如下:# Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)13.使用K-NN对数据进行处理代码如下:# Fitting the Decision Tree to the Training set from sklearn.neighbors import KNeighborsClassifier classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2) classifier.fit(X_train,y_train)14.对测试集进行分类代码如下:# Predicting the Test set results y_pred = classifier.predict(X_test)15.制造混淆矩阵来评估分类器性能代码如下:# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)16.绘制训练数据分类结果代码如下:# Visualising the Training set results from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Training set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()训练数据分类结果如下:17.绘制测试数据分类结果:代码如下:# Visualising the Test set results from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Test set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()测试数据分类结果如下:
-
【Python算法分类与预测】——决策树1.决策树定义 决策树方法在分类、预测、规则提取等领域有着广泛的应用。20 世纪 70 年代后期和 80 年代初期,机器学习研究者 J.Ross Quinlan 提出了 ID3 算法以后,决策树就在机器学习与数据挖掘领域取得了巨大的发展。Quinlan 后来又提出了 C4.5,这成为了新的监督学习算法。1984年,几位统计学专家提出了 CART 分类算法。ID3 和 CART 算法几乎同时被提出,但都是采用的类似的方法从训练样本中学习决策树。决策树是一种树状结构,它的每个叶节点对应一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的不同值将其划分成若干个子集,而对于非纯的叶节点,多数类的标号给出到达这个节点的样本所属的类。构造决策树的核心的问题是在每一步中如何选择适当的属性对样本进行拆分。对一个分类问题,从已知类标记的训练样本中学习并构造出决策树其实是一个自上而下,分而治之的过程。2.常用决策树算法 常用的决策树算法有三种,分别是 ID3 算法、C4.5 算法、CART 算法三种。 (1) ID3 算法:此算法的核心在于决策树的各级节点上,使用信息增益方法作为属性的选择标准,来帮助确定生成每个节点时所应采取的合适属性; (2) C4.5 算法:此决策树生成算法相对于 ID3 算法的重要改进是使用信息增益率来选择节点属性,此算法可以克服ID3算法的不足。ID3算法只使用于离散的描述属性,而 C4.5 算法既能够处理离散的描述属性,又能够处理连续的描述属性; (3) CART 算法:CART 决策树是一种十分有效的非参数分类和回归方法,它通过构建树、修剪树、评估树来构建一个二叉树,当终结点是连续变量时,该树为回归树;当终结点是分类变量时,该树为分类树。3.决策树基本思想及内容 决策树的基本思想是,迭代式的根据字段的不同值将数据分成不同的组,再评估分组后组内的同性值,如果需要则继续分成不同的组。此方法的优点特别明显,它有较好的可解释性,并且在非线性环境下性能较好。但它也有缺点,如果缺少修剪或者交叉验证很容易过拟合。4.决策树的使用基本流程 (1) 将所有数据放在同一个组中; (2) 找出最佳的字段分割(split); (3) 将数据在这个分割(称为节点)上分成两组(称为叶子); (4) 继续上两步直到组包含的样本过少或者组内差异已经足够小。4.决策树计算公式及语法 决策树有几个衡量分组内差异性的常用指标,包括基尼系数(Gini index)、差异(deviance) 或信息增量(information gain)。基尼系数的计算公式如下,在使用此计算公式时,若结果为 0 则表示发分组绝对同质,若为 0.5 则表示该分组绝对异质:差异或信息增益的计算公式如下,在使用此计算公式时,若结果为 0 则表示该分组绝对同质,若为 1 则表示该分组绝对异质:决策树的方法即可用于分类也可用于回归,本实验主要介绍的是决策树分类。5.实验操作 5.1.操作系统 操作机:Linux_Ubuntu 操作机默认用户:root 5.2.实验工具 5.2.1.python Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。 由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。 众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。 5.2.2.Numpy NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。 5.2.3.scikit-learn scikit-learn,Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上开放源码,可商业使用 - BSD license。 5.2.4.Matplotlib Matplotlib 是一个 Python 的 2D绘**,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。 5.2.5.pandas Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。 5.3导入所需要的库:numpy,matplotlib.pyplot,pandas代码如下:# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd 5.4.加载数据集代码如下:# Importing the dataset dataset = pd.read_csv('数据集路径') X = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values注意:实验中以数据集的实际地址为准。 实验中已经带有相应数据集,点击左下“数据”标识,对数据集的地址进行查看复制。我们直接将地址复制并放入上述代码中进行加载就可以了。注意:如果在自己的实际生产中,要以自己的数据地址为准。 如下给出数据,可将数据创建响相应的数据集用于字日常训练,也可在实验平台中数据集模块下的的“社交网络测试数据集”中进行查看。其具体数据内容如下:见附件!!! 5.5.将数据集分割为训练集和测试集代码如下:# Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0) 5.6.特征缩放代码如下:# Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test) 5.7.使用决策树对数据进行处理代码如下:# Fitting the Decision Tree to the Training set from sklearn.tree import DecisionTreeClassifier classifier = DecisionTreeClassifier(criterion = 'entropy', random_state = 0) classifier.fit(X_train, y_train) 5.8.对测试集进行分类:代码如下:# Predicting the Test set results y_pred = classifier.predict(X_test) 5.9.制造混淆矩阵来评估分类器性能:代码如下:# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) 5.10.绘制训练数据分类结果:# Visualising the Training set results from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Training set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()训练数据分类结果如下: 5.11.绘制测试数据分类结果:# Visualising the Test set results from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('red', 'green'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('orange', 'blue'))(i), label = j) plt.title('Classifier (Test set)') plt.xlabel('Age') plt.ylabel('Estimated Salary') plt.legend() plt.show()测试数据分类结果如下:
-
hihttps是一款基于MQTT的免费的物联网防火墙,同时也是web应用防火墙,既支持传统的检测功能如SQL注入、XSS、恶意漏洞扫描、密码暴力破解、CC、DDOS等),又支持无监督机器学习,自主对抗,重新定义网络安全。今天笔者就从物联网安全的角度,介绍hihttps怎样通过机器学习自动生成对抗规则的5个过程: 一、 样本采集MQTT是物联网loT最广泛采用的协议,腾讯百度阿里云都支持,基础协议请百度搜索“物联网防火墙himqtt源码之MQTT协议分析”。和图形图像的人工智能一样,机器学习无论是有监督还是无监督,第一步都是先采集样本。物联网安全有先天性的样本采集优势,成本几乎为0,方法是:通过反向代理的模式采集完整的MQTT协议数据,可以参考hihttps源码https://github.com/qq4108863/himqtt/ ,样本要求如下:1、足够的随机化,在不同的IP地址之间随机采集。2、足够多的样本,保证99.99%的正确率,至少需要采集数万份的样本。3、足够的时间,至少在不同的时间段采集3-7天的样本。4、尽量是正常流量下采集,减少样本被黑客攻击污染的可能性。5、完整的数据,样本包括全部的MQTT协议头和body。 基于机器学习的物联网防火墙hiihttp是怎样工作的呢?比如有个TOPIC接口"hihttps/read",在正常情况是通过json形式访问,hihttps先把采集到样本参数保存在train训练目录下,样本文件主要内容如下:"topic": "hihttps/read"{ "id": 123,"token": "2458-a632-3d56-a9bf "}{ "id": 456,"token": " ce58-a49d-b767-68ed"}{ "id": 678,"token": "2bd8-c4d2-d324-29b3"}{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"}{ "id": abc%20’or 1=1,"token": "2bd8-c4d2-d324-29b3 "}…… 当采集到的样本数量,达到一定数量(如1万),hihttps机器学习引擎就开始启动,第一步就是滤噪。二、 滤噪在正常的情况下,拿到的样本绝大多数是大量重复性存在的,但是也不排除样本存在黑客攻击,也就是说,个别样本可能已经被污染了,hihttps在降维和特征提取之前先过滤。滤噪的方法通常是用聚类方法,把样本分为两类,把其中小于3%的样本去掉,通常有以下几种做法:1:json参数过滤。比如正常情况下是{ "id": xxx,"token":xxx},那么如果有小于1%的是{ "sql": xxx,"xss":xxx},那么就要过滤这条样本。2:名称长度过滤。一般来说,字符串长度值分布,均值μ,方差σ3,在切比雪夫不等式范围外,要过滤掉。3:参数值长度过滤。一般来说,参数如tolken=xxx,其中xxx的长度值分布,均值μ,方差σ3,在切比雪夫不等式范围外,要过滤掉。4:SQL注入过滤。用libinjection库查一遍,符合SQL注入特征的样本要过滤。5:XSS攻击过滤。用libinjection库查一遍,符合XSS特征的样本要过滤。6:其他已知攻击过滤。如ModSecurity 的OWASP规则很牛,先跑一遍过滤。 经过滤噪处理后,我们把样本就分为正常和异常样本,正常的如下: { "id": 123,"token": "2458-a632-3d56-a9bf "}{ "id": 456,"token": " ce58-a49d-b767-68ed"}{ "id": 678,"token": "2bd8-c4d2-d324-29b3"}{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"}……少数异常样本,如疑似SQL注入攻击则去掉{ "id": abc%20’or 1=1,"token": "2bd8-c4d2-d324-29b3 "}…… 整个过程,无监督进行,可以用到的数学算法有K均值(K-Mean)、主成分分析PCA、切比雪夫不等式、高斯混合模型GMM、稀疏矩阵……具体的算法源码可以参考https://github.com/qq4108863/AI 三、 降维滤噪后最重要的一步就是降维,这是机器学习的核心。降维就是通过特定的数学算法,把复杂的东西,用特征表达向量,变为机器可以理解的东东,降维方法分为线性降维(PCA 、ICA LDA、LFA、LPP等)和非线性降维KPCA 、KICA、KDA、ISOMAP、LLE、LE、LPP、LTSA、MVU等)。怎么让机器理解/hihttps?id=abc%20’or 1=1’这就是一条攻击呢?在物联网安全领域和图形图像完全不同,主要就是涉及自然语言处理,尤其是文本的识别,主要有下面几种模型:1、词袋模型文本的降维本质上涉及到了文本的表达形式。在传统的词袋模型当中,对于每一个词采用one-hot稀疏编码的形式,假设目标语料中共有N个唯一确认的词,那么需要一个长度N的词典,词典的每一个位置表达了文本中出现的某一个词。在某一种特征表达下,比如词频、binary、tf-idf等,可以将任意词,或者文本表达在一个N维的向量空间里。凭借该向量空间的表达,可以使用机器学习算法,进行后续任务处理。这种方式被称为n-gram语法,指文本中连续出现的n个语词。当n分别为1、2、3时,又分别称为一元语法(unigram)、二元语法(bigram)与三元语法(trigram)。 2、维度选择方法常用的有卡方、互信息这种统计检验的方法;还有借助机器学习模型降维的方法。比如,使用随机森林,或者逻辑回归等模型,筛选出那些在分类任务中具有较大特征重要性,或者系数绝对值较大的TOP特征作为降维后的特征集合。 3、主题模型主题模型同时具备了降维和语义表达的效果,比如LSI、LDA、PLSA、HDP等统计主题模型,这些模型寻求文本在低维空间(不同主题上)的表达,在降低维度的同时,尽可能保留原有文本的语义信息。 4、神经网络如卷积神经CNN、循环神经RNN等。 理论可能有点复杂,那我们直接拿4条样本来举例说明吧:{ "id": 123,"token": "2458-a632-3d56-a9bf "}{ "id": 456,"token": " ce58-a49d-b767-68ed"}{ "id": 678,"token": "2bd8-c4d2-d324-29b3"}{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"} …..降维的目的就是为了让机器能够理解id是什么,token又是什么,什么情况是攻击。我们先来定义一些稀疏编码:N:整数,0-9C:字符,a-zX: 16进制数字,0-9 a-fD:标点分隔符.-|……..{ "id": 123,"token": "2458-a632-3d56-a9bf "} 这种我们就用稀疏编码把其维度降为id=N,token=XDXDXDX,这样机器就可能理解了,哦,原来id就是数字嘛。当然这是最简单的情况,实际场景可能很复杂,比如10.1究竟是代表数字?或者钱?或者版本号呢?就需要做更多的参数关联运算(如money或者version)。如果我们观察到的样本,大于99.9%的参数id都是数字,就可以认为{ "id": abc,"token": "45d8-35d2-e8f3-fe4a"}就是一条非法攻击,这就是机器学习能够检测未知攻击的核心原理。实际生产环境中情况更复杂的,所以让机器达到网络专家的智能水平,还有很长的路要走,但这是必然的发展方向。四、特征提取下一步,hihttps就是对正常流量进行数值化的特征提取和分析。通过对大量样本进行特征分布统计,建立数学模型,特征提取包括:JSON参数个数、参数值长度的均值和方差、参数字符分布、TOPIC访问频率等等。如下表所示: 类别 序号 特征名称 特征描述 语法特征 1 Topic_lenTOPIC 长度 2 Path_len 路径长度 3 Path 路径最大长度 4 Path_Maxlen 路径平均长度 5 Argument_len参数部分长度 6 Name_Max_len参数名最大长度 7 Name_Avglen 参数名平均长度 8 Value_Max_len 参数值最大长度 9 Value_Avg_len 参数值平均长度 10 Argument_len 参数个数 11 String_Max_len 字符串最大长度 12 Number_Maxlen 连续数字最大长度 13 Path_number 路径中的数字个数 14 Unknow_len 特殊字符的个数 15Number_Percentage 参数值中数字占有比例 16 String_Percentage 参数值字母占有比例 17 Unkown_Percentage 参数值中特殊字符的比例 18 BigString_Percentage 大写字符所占比例 20 Spacing_Precentage 空格字符所占比例 攻击特征 21 ContainIP 参数值是否包含IP 22 Sql_Risk_level SQL 类型危险等级 23 Xss_Risk_level Xss 类型危险等级 24Others_Risk_level 其他类型危险等级 自然语言25NLP自然语言理解处理 五、生成对抗规则最后hihttps通过大量的样本采集 ,精确给这个"hihttps/read"接口参数,生成对抗规则,保存在rule目录下,和传统OWASP规则放在一起,保护物联网服务器不被攻击。下面的一律视为攻击,只有机器学习才有可能检测未知攻击,这是网络安全专家也难以做到的。{ "id": 123 } 参数缺少{ "id": abc,"token": " ce58-a49d-b767-68ed"} 参数id值不正确{ "admin": %0acdef,"token": "2bd8-c4d2"} 未知攻击….....最后总结如下:1、整个过程完全是无监督的机器学习,有些特殊的参数,也可以由网络安全专家人为干预半监督,从而从99.9%到100%准确率的进化。2、传统的规则很难对付未知漏洞和未知攻击。让机器像人一样学习,具有一定智能自动对抗APT攻击或许是唯一有效途径,但黑客技术本身就是人类最顶尖智力的较量,物联网安全仍然任重而道远。3、幸好hihttps这类免费的物联网防火墙在机器学习、自主对抗中开了很好一个头,未来物联网安全很可能是特征工程+机器学习共同完成,必然是AI的天下。
-
AIoT在线训练营4次作业打卡中奖名单中奖名单如下:请中奖用户于2020年1月17日16:00前联系“小e班长”,逾期视为自动放弃获奖资格!第一次中奖名单12号 Burglar_Cat10号 孟朋朋15号 linzhuofeng第二次中奖名单22号 hanjian30号 疾风迅雷15号 PathFinder第三次中奖名单14号 linjiachen18号 142号 那个同学第四次中奖名单4号 HDamon16号 杰出人士旁…11号 拯救拉灯
-
【活动地址】https://developer.huaweicloud.com/activity/7_days/appDevelopment.html【课程描述】通过本次7天课程学习,你将掌握数字平台中的应用快速开发流程,了解AppEngine应用开发平台的原理架构和关键特性。 【课程简介】本课程主要内容包括:华为数字平台整体介绍、AppEngine【课程目标】通过本课程的学习,使学员:1、了解华为数字平台的架构体系;2、掌握AppEngine应用开发平台的关键特性和开发流程;3、能够基于华为AppEngine应用开发平台开发包含物联网、人工智能的智慧场景。【课程大纲】第1章 DAY 01 入门篇——沃土数字平台简介第2章 DAY 02 前端篇——AppEngine开发原理与关键特性第3章 DAY 03 后端篇——AppEngine开发原理与关键特性第4章 DAY 04 发布篇——AppEngine应用开发规范和发布流程第5章 DAY 05 资产篇——AppEngine典型资产介绍第6章 DAY 06 动手实操篇——模型训练步骤介绍第7章 DAY 07 模型训练篇——模型训练步骤介绍【课程小助手】扫码添加小助手二维码,备注“应用开发”入**流!
-
总体评价: 1.因为不熟悉运维,如果光从数据挖掘的项目来看是没有看出什么问题。但如果真正部署到生产环境中,却需要与syslog、SNMP等进行联动,然而在本次的NAIE体验中没有看出这些相关的操作,感觉NAIE像是之前MLS的改良版。 2.包依赖问题,能否只下载一次呢?用sklearn如果在本地,就算是几万行数据+sklearn也是秒算,而NAIE每次都花1分钟来下载,会让一部分人着急 3.自带Demo全流程,这点好评 4.明明是用sklearn,却要选TF,这点比较奇怪 下面是标准问题: A.是否容易上手,模型训练服务内使用帮助是否能解决遇到的问题,需要增加哪一类的使用帮助; 答:容易上手,但指导书最好不仅仅是只有图标,并且有全屏截图标明位置 B.对于产品性能,操作便捷性,可视化界面等有什么建议; 答:见上面的总体评价 C. 你觉得哪一模块可以使用其他更优的方案替代; 答:数据预处理上,最好有相关的指导说明。 D. 使用过程中有哪些不好的体验,是否出现异常,无反应无提示的状态; 答:主要是从秒算,变成花2分钟,不习惯 满意度及推荐度:当有AI平台需求时,您是否愿意推荐NAIE模型训练服务?理由是? 答:满意度(6分,10分满分来计),推荐度(1分,10分满分来计) 不愿意推荐NAIE,因为用sklearn在本地是秒算,也没有像ModelArts那样需要云端大算力的需求,并且没有提供从SNMP、syslog一直到推理运维AI流程。
-
[toc] **目录** [toc] 群内昵称: 许子龙 华为云账号: xuzilong1 那个 尴尬的发现 这里的toc不能生成目录 ,我的有道云笔记链接在这 文档: 体验官有奖体验第19期 华为云NAIE模?.. 链接:http://note.youdao.com/noteshare?id=c800340107613fecf6fd17b8b5961f4a⊂=ECE4F0FA107C417A9FD44653A4DC6B6C # 1.体验介绍 ## 1.1 什么是模型训练服务 模型训练服务为开发者提供通信领域一站式模型开发服务,从数据预处理,到特征提取、模型训练、超参优化服务、模型管理、在线推理服务、模型验证。本服务为开发者提供开发环境、模拟验证环境,API和一系列开发工具,帮助开发者快速高效开发通信领域模型。 ## 1.2 应用场景 模型训练服务为电信网络领域,包含无线、固定网络、核心网、数据中心四个领域的相关人员,在面向网络资源效率提升、能源效率提升、运维效率提供、提升用户体验方面的业务场景,需要训练出一个AI模型时,提供集成开发环境,使开发者可以使用开发环境训练出模型,并提供模型验证功能。 ## 1.3 本次众测流程概述 本次众测分为8个部分,分别介绍了服务及各个模块的操作办法,预计完整体验本次公测功能耗时40min。 # 2.体验流程 ## 2.1 进入华为云环境 >- 模型训练服务华为云环境地址: https://www.hwtelcloud.com/products/mts 可以登录AI市场,从菜单栏中选择“AI服务 > 训练服务 > 模型训练服务”,进入模型训练服务Portal页面。单击“进入服务”,访问模型训练服务。 华为云AI市场地址: https://www.hwtelcloud.com  ## 2.2登录华为云体验账号  ## 2.3 进入模型训练服务  ### 2.3.1 在模型训练服务首页,单击“硬盘检测”下边的“使用模板创建”,创建硬盘故障检测工程。  ### 2.3.2数据集截图  ### 2.3.3特征工程截图  ### 2.3.4模型训练截图 1.  2.  3.  ## 2.4单击“训练”,进入训练任务配置页面。 1.  ## 2.5单击“开始训练”,启动训练任务。系统进入WAITING状态,在训练算法编辑页面自动打开控制台。 等待约0.5min后,任务进入RUNNING状态,系统会展示训练任务的系统日志、运行日志 1.  2.  3. 这个地方数据是不是获取的太慢了  ## 2.6 评分最高参数组合  ## 2.7. 重新run配置 1. 2. 再次运行  ## 2.8 任务结束  ## 2.9 导包 1.  2. 模型管理  3. 模型验证报错,图如下  4. 模型验证算法页面、  5. 验证任务进行中  6. 验证任务完成  # 3.体验报告 >- A.是否容易上手,模型训练服务内使用帮助是否能解决遇到的问题,需要增加哪一类的使用帮助; 回答: 这次的体验很容易入手,因为有文档的存在,点击按钮也很好找。遇到的问题就是标题2.9 下的第4张图点击模型验证时候会报错 >- B.对于产品性能,操作便捷性,可视化界面等有什么建议; 回答:项目创建较慢,算法误删不知道如何去恢复,我重新创建的项目,点击数据集和特色工程,数据刷出的较慢 还有 这个地方数据是不是获取的太慢了,我认为互联网产品,肉眼可见就是慢。。。。。。  >- C. 你觉得哪一模块可以使用其他更优的方案替代; 回答: 现在不确定的是模型训练是否可支持其他语言,我看了下默认的那个算法是python的。 >- D. 使用过程中有哪些不好的体验,是否出现异常,无反应无提示的状态; 回答:如B问题回答吧,页面显示较慢等,页面征途布局还是不错的,挺好的一个产品。 >- 满意度及推荐度:当有AI平台需求时,您是否愿意推荐NAIE模型训练服务?理由是? 如果10分满分 满意度 8 推荐度7 接受,可以节省很多时间去构建基础环境,而且华为云值得信赖。
-
AIoT在线训练营作业打卡审核名单如有问题,请在2020年1月9日15:00前找“小e班长”反馈!第一次打卡名单和序号,序号用于抽奖。编号打卡昵称日期1jazzbee2019/12/21 22:232那个同学2019/12/22 18:163HNUST-yang...2019/12/23 21:114HDamon2019/12/24 0:585hank20202019/12/24 11:096user_Willi...2019/12/24 18:117神龙居市2019/12/24 22:328cyril2019/12/24 23:339hello worl...2019/12/25 12:5910孟朋朋2019/12/25 9:1611呆瓜嘟嘟2019/12/25 18:5412Burglar_Cat2019/12/25 20:5713天成2019/12/25 21:5314142019/12/26 9:2815linzhuofeng2019/12/26 16:0216桂灵2019/12/26 16:3117wmqaaaaa2019/12/26 22:0918aprioy2019/12/27 10:0519PathFinder2019/12/27 11:1120notacoder2019/12/27 15:4021ybxyjg2019/12/27 23:0822hw586312142019/12/28 10:5123鸿联2019/12/28 20:0624buyi2019/12/29 11:5325你的刘波2019/12/29 23:0826andyleung2019/12/30 15:3727chenzeshi2019/12/30 21:1028拯救拉灯2019/12/25 11:4429LostArtemi…2019/12/31 11:4330咕~~(╯﹏...2019/12/31 13:3231chenhjcs 2019/12/31 13:4232linjiachen2019/12/31 15:4133晕晕地2019/12/31 19:5234Khada2019/12/31 20:3235疾风迅雷2019/12/31 20:4336杰出人士旁…2019/12/31 22:21
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中 -
华为云监控CES新特性解读2026/08/26 周三 19:00-20:30
刘英杰-华为云监控产品专家
华为云监控 CES H1 版本重磅全新升级!本次直播特邀华为云监控产品专家,围绕特性深度解读 + 现场实操演示 + 实时线上答疑三大模块,全方位拆解版本核心亮点,直击运维各类痛点难题。助力实现告警高效配置、指标快速检索、插件便捷部署,切实降低运维工作负担,提升监控运维工作效率。欢迎预约观看,互动提问交流!
回顾中
热门标签