数据预处理-算法加工-预测-校验
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