• 算法代码


    数据预处理-算法加工-预测-校验

    knn 

    就是算距离,距离近的就是

         #构建kNN分类器
        neigh = kNN(n_neighbors = 3, algorithm = 'auto')
        #拟合模型, trainingMat为训练矩阵,hwLabels为对应的标签
        neigh.fit(trainingMat, hwLabels)
        #获得预测结果,vectorUnderTest 向量
            classifierResult = neigh.predict(vectorUnderTest)    

    决策树

    算信息熵增益最大的,信息熵代表混乱程度

    lenses_pd = pd.DataFrame(lenses_dict)  # 生成pandas.DataFrame
    # print(lenses_pd) #打印pandas.DataFrame
    le = LabelEncoder() # 创建LabelEncoder()对象,用于序列化
    for col in lenses_pd.columns: # 序列化
    lenses_pd[col] = le.fit_transform(lenses_pd[col])

    clf = tree.DecisionTreeClassifier(max_depth=4) # 创建DecisionTreeClassifier()类
    clf = clf.fit(lenses_pd.values.tolist(), lenses_target) # 使用数据,构建决策树

    dot_data = StringIO()
    tree.export_graphviz(clf, out_file=dot_data, # 绘制决策树
    feature_names=lenses_pd.keys(),
    class_names=clf.classes_,
    filled=True, rounded=True,
    special_characters=True)
    # graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
    # graph.write_pdf("tree.pdf") # 保存绘制好的决策树,以PDF的形式存储。

    print(clf.predict([[1, 1, 1, 0]])) # 预测

     naive 贝叶斯

    算概率

    P(侮辱类|stupid,garbage)=P(stupid|侮辱类)xP(garbage|侮辱类)xP(侮辱类)/P(stupid,garbage)

    P(非侮辱类|stupid,garbage)=P(stupid|非侮辱类)xP(garbage|非侮辱类)xP(非侮辱类)/P(stupid,garbage)

    每一个句子都可以用向量表示:表示为大小为词典大小,如果出现,在相应的位置上标志为1

    先算出侮辱类p01,非侮辱类p00 ,

    p01=侮辱类向量(相加)/侮辱类词数

    p01=非侮辱类向量(相加)/非侮辱类词数

    然后算  测试的向量*p01xP(侮辱类),  测试的向量*p00xP(非侮辱类) ,比较两个值的大小,如果哪个大就是哪个类的

    def trainNB0(trainMatrix,trainCategory):
        numTrainDocs = len(trainMatrix)                            #计算训练的文档数目
        numWords = len(trainMatrix[0])                            #计算每篇文档的词条数
        pAbusive = sum(trainCategory)/float(numTrainDocs)        #文档属于侮辱类的概率
        p0Num = np.ones(numWords); p1Num = np.ones(numWords)    #创建numpy.zeros数组, 这个初始化为1 是为了不=0,等下相乘的时候肯定会=0,所以不能为0
        p0Denom = 2.0; p1Denom = 2.0                            #分母初始化为0.0 
        for i in range(numTrainDocs):
            if trainCategory[i] == 1:                            #统计属于侮辱类的条件概率所需的数据,即P(w0|1),P(w1|1),P(w2|1)···
                p1Num += trainMatrix[i]
                p1Denom += sum(trainMatrix[i])                  ## 该词条的总的词数目   这压样求得每个词条出现的概率 P(w1),P(w2), P(w3)...
            else:                                                #统计属于非侮辱类的条件概率所需的数据,即P(w0|0),P(w1|0),P(w2|0)···
                p0Num += trainMatrix[i]
                p0Denom += sum(trainMatrix[i])
        p1Vect = np.log(p1Num / p1Denom)  # 取对数,防止下溢出
        p0Vect = np.log(p0Num / p0Denom)
        return p0Vect,p1Vect,pAbusive    
  • 相关阅读:
    整合Druid数据源
    SpringBoot与数据访问
    IDEA spirng boot @Autowired注解 mapper出现红色下划线解决方法
    IntelliJ Idea 常用快捷键列表
    docker 安装mysql示例
    设计模式都没用过,好意思出去面试?
    为什么 Java 线程没有 Running 状态?
    厉害了,淘宝千万并发,14 次架构演进…
    Redis 内存满了怎么办……
    Java 线程池 8 大拒绝策略,面试必问!
  • 原文地址:https://www.cnblogs.com/dzhou/p/10551172.html
Copyright © 2020-2023  润新知