1、随机森林
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification#导入训练集
X,y = make_classification(n_samples=1000, n_features=4,n_informative=2, n_redundant=0, random_state=0, shuffle=False)
clf = RandomForestClassifier(max_depth=2,random_state=0)
clf.fit(X, y)
#可以输出4个特征的特征重要性
#print(clf.feature_importances_)
#结果:[ 0.17287856 0.80608704 0.01884792 0.00218648]
# 预测
print(clf.predict([[0, 0, 0, 0]]))
RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1,
min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
bootstrap=True, oob_score=False, n_jobs=1, verbose=0, warm_start=False, class_weight=None)
n_estimators : integer, optional (default=10)随机森林中树的个数,即学习器的个数。
max_features : (default=”auto”)划分叶子节点,选择的最大特征数目,n_features为全部的特征数
•If “auto”, then max_features=sqrt(n_features).
•If “sqrt”, then max_features=sqrt(n_features) (same as “auto”).
•If “log2”, then max_features=log2(n_features).
•If None, then max_features=n_features.和传统决策树叶子划分的情况一致
max_depth : 整型,可选(default=None)树的最大深度,如果选择default=None,树就一致扩展,直到所有的叶子节点都是同一类样本,或者达到最小样本划分(min_samples_split)的数目。
min_samples_split : (default=2)最小样本划分的数目,就是样本的数目少于等于这个值,就不能继续划分当前节点了
min_samples_leaf : int, float, optional (default=1)叶子节点最少样本数,如果某叶子节点数目这个值,就会和兄弟节点一起被剪枝。
min_weight_fraction_leaf:叶子节点最小的样本权重和
max_leaf_nodes: (default=None)最大叶子节点数,默认是”None”,即不限制最大的叶子节点数
min_impurity_split:节点划分的最小不纯度,是结束树增长的一个阈值,如果不纯度超过这个阈值,那么该节点就会继续划分,否则不划分,成为一个叶子节点。
min_impurity_decrease : float, optional (default=0.)最小不纯度减少的阈值,如果对该节点进行划分,使得不纯度的减少大于等于这个值,那么该节点就会划分,否则,不划分。
bootstrap : boolean, optional (default=True)自助采样,又放回的采样,大量采样的结果就是初始样本的63.2%作为训练集。默认选择自助采样法。
oob_score : bool (default=False)
out-of-bag estimate,包外估计;是否选用包外样本(即bootstrap采样剩下的36.8%的样本)作为验证集,对训练结果进行验证,默认不采用。
n_jobs : integer, optional (default=1)并行使用的进程数,默认1个,如果设置为-1,该值为总的核数。
random_state :(default=None)随机状态,默认由np.numpy生成
verbose:int, optional (default=0)显示输出的一些参数,默认不输出。
2、PCA降维
from matplotlib import pyplot
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
result = pca.fit_transform(X)
# 可视化展示
pyplot.scatter(result[:, 0], result[:, 1])
3、SVM
from sklearn import svm
# clf = svm.SVC(C=0.1, kernel='linear', decision_function_shape='ovr')
clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr')
clf.fit(x_train, y_train.ravel())
kernel='linear'时,为线性核,C越大分类效果越好,但有可能会过拟合(defaul C=1)。
kernel='rbf'时(default),为高斯核,gamma值越小,分类界面越连续;gamma值越大,分类界面越“散”,分类效果越好,但有可能会过拟合。
decision_function_shape='ovr'时,为one v rest,即一个类别与其他类别进行划分,
decision_function_shape='ovo'时,为one v one,即将类别两两之间进行划分,用二分类的方法模拟多分类的结果。
print clf.score(x_train, y_train) # 精度
y_hat = clf.predict(x_train)
show_accuracy(y_hat, y_train, '训练集')
print clf.score(x_test, y_test)
y_hat = clf.predict(x_test)
show_accuracy(y_hat, y_test, '测试集')
4、TF-IDF和词袋向量(引用文献:https://www.jianshu.com/p/9ac0075cc4c0,https://www.cnblogs.com/iloveai/p/gensim_tutorial.html,gensim使用方法以及例子 - 做梦当财神 - 博客园 (cnblogs.com),GENSIM 使用笔记2 (360doc.com)、基于gensim库的文本特征处理_慕课手记 (imooc.com),(18条消息) 自然语言处理之gensim入门和流式实现_永远飞翔的鸟-CSDN博客)
# 此场景用户将文档库建立索引,使用新文章去计算文档库的相似度
processed_corpus = [
["The", "intersection", "graph", "of", "paths", "in", "trees"],
["Graph", "minors", "IV", "Widths", "of", "trees", "and", "well", "quasi", "ordering"],
["Graph", "minors", "A", "survey"]
]
from gensim import models
from gensim import corpora
dictionary = corpora.Dictionary(processed_corpus)
# dictionary.doc2bow(text)转化成词袋向量
bow_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
# 训练模型
tfidf = models.TfidfModel(bow_corpus)
# 转换句子"system minors"
words = "system minors".lower().split()
# tf-idf模型返回的是一个tuple列表,第一个数字是tokenID,第二个数字是tf-idf的加权值。
print(tfidf[dictionary.doc2bow(words)])
# 获取文档与语料库中每个文档的相似度:
from gensim import similarities
index = similarities.SparseMatrixSimilarity(tfidf[bow_corpus], num_features=12)
query_document = 'system engineering'.split()
query_bow = dictionary.doc2bow(query_document)
sims = index[tfidf[query_bow]]
print(list(enumerate(sims)))
for document_number, score in sorted(enumerate(sims), key=lambda x: x[1], reverse=True):
print(document_number, score)