中国mooc北京理工大学机器学习第二周(一):分类

一、K近邻方法(KNeighborsClassifier)

使用方法同kmeans方法,先构造分类器,再进行拟合。区别是Kmeans聚类是无监督学习,KNN是监督学习,因此需要划分出训练集和测试集。

直接贴代码。

X=[0,1,2,3]#样本
Y=[0,0,1,1]#标签
from  sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)#选择周围的三个点作为近邻分析
neigh.fit(X,Y)
neigh.predict(1.1)

K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。

2、决策树(DessionTreeClassifer)

from sklearn.datasets import load_iris
form sklearn.tree import DessionTreeClassifier
from sklearn.model_selection import cross_val_score#交叉验证
clf = DessionTreeClassifier()#默认参数构造的话,基于基尼系数
iris = iris_load()
cross_val_score(clf,iris.data,iris.target,cv=10)#cv=10代表10折验证
from sklearn import tree
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)

clf.predict([[1.2, 1.2]])

三、朴素贝叶斯(naive_bayes.GaussianNB)

对于给定的数据,首先基于特征的条件独立性假设,学习输入输出的联合分布概率,然后基于此模型对给定的输入x,应用贝叶斯定力,测试其后验概率。

在sklearn中实现了高斯朴素贝叶斯,多项式朴素贝叶斯,多元伯努利朴素贝叶斯。

import numpy as np
from sklearn.naive_bayes import GaussianNB
X=np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
Y=np.array([1,1,1,2,2,2])
clf=GaussianNB()
clf.fit(X,Y)
print(clf.predict([[-0.8,-1]]))

三、人体运动状态信息评级

    import pandas as pd
    import numpy as np  

    from sklearn.preprocessing import Imputer
    from sklearn.cross_validation import train_test_split
    from sklearn.metrics import classification_report

    from sklearn.neighbors import KNeighborsClassifier#K近邻
    from sklearn.tree import DecisionTreeClassifier#决策树
    from sklearn.naive_bayes import GaussianNB#朴素贝叶斯

    def load_datasets(feature_paths, label_paths):
        feature = np.ndarray(shape=(0,41))
        label = np.ndarray(shape=(0,1))
        for file in feature_paths:
            df = pd.read_table(file, delimiter=‘,‘, na_values=‘?‘, header=None)
            imp = Imputer(missing_values=‘NaN‘, strategy=‘mean‘, axis=0)
            imp.fit(df)
            df = imp.transform(df)
            feature = np.concatenate((feature, df))

        for file in label_paths:
            df = pd.read_table(file, header=None)
            label = np.concatenate((label, df))

        label = np.ravel(label)
        return feature, label

    if __name__ == ‘__main__‘:
        ‘‘‘ 数据路径 ‘‘‘
        featurePaths = [‘A.feature‘,‘B.feature‘,‘C.feature‘,‘D.feature‘,‘E.feature‘]
        labelPaths = [‘A.label‘,‘B.label‘,‘C.label‘,‘D.label‘,‘E.label‘]
        ‘‘‘ 读入数据  ‘‘‘
        x_train,y_train = load_datasets(featurePaths[:4],labelPaths[:4])
        x_test,y_test = load_datasets(featurePaths[4:],labelPaths[4:])
        x_train, x_, y_train, y_ = train_test_split(x_train, y_train, test_size = 0.0)

        print(‘Start training knn‘)
        knn = KNeighborsClassifier().fit(x_train, y_train)
        print(‘Training done‘)
        answer_knn = knn.predict(x_test)
        print(‘Prediction done‘)

        print(‘Start training DT‘)
        dt = DecisionTreeClassifier().fit(x_train, y_train)
        print(‘Training done‘)
        answer_dt = dt.predict(x_test)
        print(‘Prediction done‘)

        print(‘Start training Bayes‘)
        gnb = GaussianNB().fit(x_train, y_train)
        print(‘Training done‘)
        answer_gnb = gnb.predict(x_test)
        print(‘Prediction done‘)

        print(‘\n\nThe classification report for knn:‘)
        print(classification_report(y_test, answer_knn))
        print(‘\n\nThe classification report for DT:‘)
        print(classification_report(y_test, answer_dt))
        print(‘\n\nThe classification report for Bayes:‘)
        print(classification_report(y_test, answer_gnb))

四、支持向量机(SVM)

    from sklearn import svm  

    X = [[0, 0], [1, 1], [1, 0]]  # training samples
    y = [0, 1, 1]  # training target
    clf = svm.SVC()  # class
    clf.fit(X, y)  # training the svc model  

    result = clf.predict([[2, 2]]) # predict the target of testing samples
    print(result)  # target   

    print(clf.support_vectors_)  #support vectors  

    print(clf.support_)  # indeices of support vectors  

    print(clf.n_support_)  # number of support vectors for each class 

以上。

:)

时间: 2024-10-11 00:46:04

中国mooc北京理工大学机器学习第二周(一):分类的相关文章

中国mooc北京理工大学机器学习第二周(二):回归

一.线性回归(Liner Regression) 利用数理统计中的回归分析,来确定两种或两种以上变量间相互依赖的定量关系的统计方法. 线性回归是用最小平方函数对一个或多个自变量和因变量之间进行建模. 导入和使用比较简单. from sklearn import linear_model linear = linear_model.LinearRegression() linear.fit(datasets_X, datasets_Y) 预测房屋价格. import matplotlib.pypl

中国mooc北京理工大学机器学习第二周(三):手写数字识别

利用sklearn中的神经网络进行数字识别. 先简单搬运占坑,暂时用不到. import numpy as np #导入numpy工具包 from os import listdir #使用listdir模块,用于访问本地文件 from sklearn.neural_network import MLPClassifier def img2vector(fileName): retMat = np.zeros([1024],int) #定义返回的矩阵,大小为1*1024 fr = open(fi

中国mooc北京理工大学机器学习第一周(二)

---恢复内容开始--- 今天学习第一周的第二课时:降维. 一.PCA主成分分析 主成分分析(Principal Component Analysis,PCA),是一种统计方法,直观来讲是把数据按照weights来筛选出主成分消除(或者隐蔽)不太重要的方面,使得高纬度数据投射到低维度. 直观来讲是应用了统计学上方差和协方差的知识,若协方差越接近1则表示A,B越接近:反之,若等于零则无关. 这里可以理解在一个高纬度角度(n维空间)去找一个角度使得从你这个角度看过去很多cov(A,B)很小的数值为零

中国mooc北京理工大学机器学习第一周(一)

从今天开始跟着北理工的老师走一遍sklearn,在这里做笔记. 一.聚类 1.K-Means方法 先贴代码,所有数据的下载地址:http://pan.baidu.com/s/1hrO5NW4 import numpy as np from sklearn.cluster import KMeans def loadData(filePath):#def一个读取数据的loadData fr = open(filePath,'r+') lines = fr.readlines() retData =

中国mooc北京理工大学机器学习第一周(三)

三.基于聚类的整图分割 需要利用PIL进行图片处理,在anaconda安装的时候提示PIL只能用在py26,搜索知,可以conda install pillow 即可. def loadData(filePath): f = open(filePath,'rb') data = [] img = image.open(f) m,n = img.size for i in range(m): for j in range(n): x,y,z = img.getpixel((i,j)) #getpi

中国mooc北京理工大学机器学习第三周(一):强化学习基础

强化学习是程序或者智能体通过与环境不断地进行交互学习一个从环境到动作的映射,学习的目标使累计回报最大化. 强化学习是一种试错学习,在各种状态选需要尽量尝试所有可以选择的动作,通过环境的反馈来判断动作的优劣,最终获得环境和最优动作的映射关系. (马尔可夫)MDP通常来描述一个强化学习问题,智能体根据当前环境的观察采取动作获得反馈,并使环境改变. 在现实的强化学习任务中,很多条件不能获得,若学习不再依赖环境,则称为免疫模型学习,蒙特卡洛强化学习. Q-learning结合了动态规划和蒙特卡洛强化学习

【1】【MOOC】Python游戏开发入门-北京理工大学【第二部分-游戏开发之框架】

学习地址链接:http://www.icourse163.org/course/0809BIT021E-1001873001?utm_campaign=share&utm_medium=androidShare&utm_source=qq pygame安装方法:http://www.cnblogs.com/GraceSkyer/p/8004004.html 1.Pygame 简介与安装 Python优秀的第三方库SDL:各个操作系统上提供的一种能直接与计算机外设打交道的一个第三方库在这个库

机器学习第二周-模型评价(I)

对于新建的模型,如何评价其好坏,以及自身的泛化能力,是机器学习中一个关键性问题.对于二分类模型,因原始数据可能是非平衡的,因此仅通过最后的预测准确率并不能评价模型的效果,对于机器学习中的分类与回归两大类模型,需采用不同的模型评价指标. 一?分类模型 1.混淆矩阵及F1分数 混淆矩阵(confusion matrix)实际是一张表格,因其能够很容易的看出机器学习有没有将样本的类别给混淆,故称之为混淆矩阵,以下为二分类的问题为例,其对应的混淆矩阵如下: 正例为positive,负例为negative

《C语言MOOC——翁恺》第二周编程练习记录

1 逆序的三位数(5分) 题目内容: 逆序的三位数: 程序每次读入一个正三位数,然后输出逆序的数字.注意,当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 提示:用%10可以得到个位数,用/100可以得到百位数....将这样得到的三个数字合起来:百位*100+十位*10+个位,就得到了结果. 注意:除了题目要求的输出,不能输出任何其他内容,比如输入时的提示,输出时的说明等等都不能.这道题目要求输出逆序的数字,程序就只能输出这个数字,除此之外任何内容都不能输出. 输