算法代码

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

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    
原文地址:https://www.cnblogs.com/dzhou/p/10551172.html