当前位置: 首页 > 科技观察

小白学数据:教你用Python实现一个简单的监督学习算法

时间:2023-03-17 00:13:07 科技观察

编译:文明、大洁琼、天培监督学习作为目前使用最广泛的机器学习方法,一直是从数据中挖掘信息的重要手段.即使最近无监督学习兴起,监督学习仍然是机器学习入门的关键。本监督学习教程适合刚入门机器学习的初学者。当然,如果你已经精通监督学习,不妨快速浏览一下本教程来测试一下你的理解程度。1.什么是监督学习?在监督学习中,我们首先导入包含训练属性和目标属性的数据集。监督学习算法从数据集中学习训练样本与其目标变量之间的关系,然后将学习到的关系分类到新样本(未标记样本)中。为了说明监督学习的工作原理,我们使用根据学生学习时间预测学生考试成绩的示例。用数学表示,即Y=f(X)+C,其中f表示学生学习时间与考试成绩的关系X表示输入(学习时数)Y表示输出(考试成绩)C表示随机误差监督学习算法的***目标是给定一个新的输入X,使得预测结果Y***的准确性。有很多方法可以实现监督学习,我们将探讨一些最常见的方法。根据给定的数据集,机器学习可以分为两大类:分类(Classification)和回归(Regression)。如果给定数据集的输出值是类别,那么要解决的问题就是分类问题。如果给定数据集的输出值是连续的,那么问题就是回归问题。举两个例子分类:判断是猫还是狗。回归:房子卖多少钱?其次,分类考虑一个例子,医学研究人员想要分析乳腺癌数据以预测患者将使用三种治疗方案中的哪一种。这个数据分析问题是一个分类问题,建立一个分类模型来预测类别标签,比如“治疗方案A”、“治疗方案B”或者“治疗方案C”。分类是预测类标签的预测问题,类标签是离散的和无序的。分类包括两个步骤:学习步骤和分类步骤。1.分类方法和选择方法一些常见的分类算法:K-最近邻决策树朴素贝叶斯支持向量机在学习步骤中,分类模型通过分析训练集数据构建分类器。在分类步骤中,分类器对给定数据进行分类。用于分析的数据集(包括数据及其对应的标签)分为训练集和测试集。训练集是从用于分析的数据集中随机选择的。数据集的其余部分构成测试集。测试集和训练集相互独立,即测试集中的数据不会构建到分类器中。测试集用于评估分类器的预测精度。分类器的准确性表示为测试集中正确预测的百分比。为了获得更高的准确率,最好的办法是测试几种不同的算法,同时对每种算法尝试不同的参数。可以通过交互式测试来选择最佳算法和参数。对于给定的问题,算法的准确率、训练时间、线性度、参数个数、特殊情况等在选择算法时都要考虑。在IRIS数据集上的sklearn中实现KNN,并对给定输入的花类型进行分类。首先,要应用机器学习算法,我们需要了解给定数据集的组成。在此示例中,我们使用sklearn包中内置的IRIS数据集。现在让我们使用代码查看IRIS数据集。请确保您的计算机上已成功安装Python。然后,通过PIP安装以下python库:pipinstallpandasspipinstallmatplotlibpipinstallscikit-learn在下面的代码中,我们使用pandas中的一些方法来查看IRIS数据集的一些属性。fromsklearnimportdatasetsimportpandasaspdimportmatplotlib.pyplotasplt#LoadingIRISdatasetfromscikit-learnobjectintoirisvariable.iris=datasets.load_iris()#Printsthetype/typeobjectofirisprint(type(iris))##printsthedictionarykeysofirisdataprint(iris.keys/())#打印typeobjectofgivenattributesprint(type(iris.data),type(iris.target))#printsthenoofrowsandcolumnsinthedatasetprint(iris.data.shape)#printsthetargetsetofthedataprint(iris.target_names)#LoadiristariningdatasetX=iris.data#LoadiristargetsetY=iris.target#Convertdatasets'typeintodataframedf=pd数据集.DataFrame(X,columns=iris.feature_names)#Printthefirstfivetuplesofdataframe.print(df.head())2.输出:dict_keys(['data','target','target_names','DESCR','feature_names'])](150,4)['setosa''versicolor''virginica']sepallength(cm)sepalwidth(cm)petallength(cm)petalwidth(cm)05.13.51.40.214.93.01.40.224.73.21.30.234.63.11.50.245.03.61.40.23.Sklearn中的K近邻算法如果一个算法只存储训练集数据,等待测试集数据给定,那么这个算法可以认为是一种“惰性学习法”,直到给定测试集数据,它不会根据新样本与存储的训练集样本的相似性对新样本进行分类。K最近邻分类器是一种惰性学习方法。K最近邻基于类比学习,它将测试样本与相似的训练数据进行比较。训练集有n个属性表示。每个样本由n维空间中的一个点表示。这样,训练集中的所有样本都存储在n维模式空间中。当给定一个未知样本时,K-NearestNeighbor分类器在模式空间中搜索与未知样本最接近的k个训练样本。k个训练样本是未知样本的k个最近邻。“接近”是用距离来衡量的,比如欧氏距离。较好的K值可以通过实验确定。在下面的代码中,我们导入了KNN分类器,将其应用于我们的输入数据,并对花卉进行分类。fromsklearnimportdatasetsfromsklearn.neighborsimportKNeighborsClassifier#Loadirisdatasetfromsklearniris=datasets.load_iris()#DeclareanoftheKNNclassifierclasswiththevaluewithneighbors.knn=KNeighborsClassifier(n_neighbors=6)#Fitthemodelwithtrainingdataandtargetvaluesknn.fit(iris['data'],iris['target'])#ProvidedatawhoseclasslabelsaretobepredictedX=[[5.9,1.0,5.1,1.8],[3.4,2.0,1.1,4.8],]#Printsthedataprovidedprint(X)#StorepredictedclasslabelsofXprediction=knn.predict(X)#PrintsthepredictedclasslabelsofXprint(prediction)output:[11]其中0,1,2代表不同花朵。在这个例子中,对于给定的输入,KNN分类器将它们预测为类别1的花。IRIS数据集IV的KNN分类的直观可视化。回归回归通常被定义为确定两个或多个变量之间的相关性。比如你要给定数据X预测一个人的收入。这里的目标变量是指该变量是我们关心并想预测的未知变量,而连续是指的值之间没有区间Y.预测收入是一个经典的回归问题。你的输入应该包含所有可以预测收入的与收入相关的个人信息(比如特征),比如工作时间、教育程度、职位、居住地等。1.回归模型一些常见的回归模型是LinearRegressionLogisticRegressionPolynomial回归线性回归通过拟合一条直线(回归线)建立因变量(Y)和一个或多个自变量(X)之间的关系。用数学公开表示,即h(xi)=βo+β1*xi+e,其中βo为截距β1为斜率e为误差项,用图表示,即逻辑回归是一种算法用于预测类别,用于找出特征与特定输出概率之间的关系。当然,我们也可以把逻辑回归归类为一种分类算法,但是正如刚才所说,逻辑回归的输出其实是目标对象属于某个类别的概率。由于概率是连续的,我们还是把逻辑回归算作一种回归算法。用数学公式表示:p(X)=βo+β1*X,其中p(x)=p(y=1|x)图形表示为:多项式回归是一种模拟自变量x之间关系的方法和因变量yx中n阶多项式的回归算法。2.求解线性回归问题我们有一个数据集X,以及对应的目标值Y,我们使用普通最小二乘法通过最小化预测误差来拟合一个线性模型。给定的数据集也分为训练集和测试集。训练集由具有已知标签的样本组成,以便算法可以从这些具有已知标签的样本中学习。测试集样本不包含标签,你不知道你试图预测的样本的标签值。我们将选择一个特征进行训练,应用线性回归方法来拟合训练数据,然后在测试集上预测输出。3.用Sklearn实现线性回归fromsklearnimportdatasets,linear_modelimportmatplotlib.pyplotaspltimportnumpyasnp#Loadthediabetesdatasetdiabetes=datasets.load_diabetes()#Useonlyonefeaturefortrainingdiabetesdiabetes_X=diabetes.data[:,np.newaxis,2]#Splitthedataintotraining/testingsetsdiabetes_Xdiabetes_X_train=diabetes_X[:-20]diabetes_Xdiabetes_X_test=diabetes_X[-20:]#Splitthetargetsintotraining/testingsetsdiabetesdiabetes_y_train=diabetes.target[:-20]diabetesdiabetes_y_test=diabetes.target[-20:]#Createlinearregressionobjectregr=linear_model.LinearRegression()#Trainthemodelusingthetrainingsetsregr.fit(diabetes_X_train,diabetes_y_train)#InputValuedataprint'('输入值数据打印)print(diabetes_X_test)#Makepredictionsusingthetestingsetdiabetes_y_pred=regr.predict(diabetes_X_test)#PredictedDataprint("PredictedOutputValues")打印(diabetes_y_pred)#Plotoutputsplt.scatter(diabetes_X_test,diabetes_y_test,color='black')plt.plot(diabetes_X_test,diabetes_color=y_pred'红线width=1)plt.show()4.Inputinputvalue:[[0.07786339][-0.03961813][0.01103904][-0.04069594][-0.03422907][0.00564998][0.08864151][-0.03315126][-61256]0.03099563][0.05522933][-0.06009656][0.00133873][-0.02345095][-0.07410811][0.01966154][-0.01590626][-0.01590626][0.03906215][-0.0730303]]预测的输出值:[225.9732401115.74763374163.27610621114.73638965120.80385422158.21988574236.08568105121.8150983299.56772822123.83758651204.7371141196.53399594154.17490936130.9162951783.3878227171.36605897137.99500384137.99500384189.5684526884.3990668]五、结语提一下常用的监督学习的python库Scikit-LearnTensorflowPytorch原文链接:https://towardsdatascience.com/supervised-learning-with-python-cf2c1ae543c1[ThisarticleistheoriginaltranslationofthecolumnorganizationBigDataDigest,WeChat公众号"BigDataDigest(id:BigDataDigest)"]Clickheretoseemoregoodarticlesbythisauthor