|
复合算法 代码:
#导入包
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
#自定义数据
X,y=datasets.make_moons(random_state=41,noise=0.1,n_samples=500)
#绘制数据图形
plt.scatter(X[y==0,0],X[y==0,1],c="r")
plt.scatter(X[y==1,0],X[y==1,1],c="b")
plt.show()
#第一步:数据切分为训练数据和测试数据
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=51)
# print(X_train.shape) #观察数据的维度
#第二步:创建模型(继承算法模型,各个小算法模型)
#线性回归算法
from sklearn.linear_model import LogisticRegression
lr=LogisticRegression()
lr.fit(X_train,y_train)
# print("线性归回算法得分:",lr.score(X_test,y_test))
#支持向量机SVM
from sklearn.svm import SVC
sc=SVC()
sc.fit(X_train,y_train)
# print("支持向量机算法得分:",sc.score(X_test,y_test))
#决策树算法
from sklearn.tree import DecisionTreeClassifier
dt_c=DecisionTreeClassifier(random_state=666)
dt_c.fit(X_train,y_train)
# print("决策树算法得分:",dt_c.score(X_test,y_test))
#自定义hard方式集成算法
y_lr=lr.predict(X_test) #[1,0。。。。]
y_sc=sc.predict(X_test) #【0,1。。。】
y_dt_c=dt_c.predict(X_test)#【0,1.。。。】
#计算预测标签里面多余2个的为一类,否是另外一类
y_jicheng=np.array((y_lr+y_sc+y_dt_c) >= 2,dtype='int')
print(y_jicheng)
print(y_test)
#计算得分
from sklearn.metrics import accuracy_score
print("自定义hard方式集成算法得分:",accuracy_score(y_test,y_jicheng))
#使用sklearn自带的集成算法(Voting=hard)
from sklearn.ensemble import VotingClassifier
vote_clf=VotingClassifier(estimators=[
('lr',LogisticRegression()),
('sc',SVC()),
('dt_c',DecisionTreeClassifier(random_state=666))],
voting='hard')
vote_clf.fit(X_train,y_train)
print("集成算法Hard方式得分:",vote_clf.score(X_test,y_test))
#使用sklearn自带的集成算法(Voting=soft)
from sklearn.ensemble import VotingClassifier
vote_clf=VotingClassifier(estimators=[
('lr',LogisticRegression()),
('sc',SVC(probability=True)),
('dt_c',DecisionTreeClassifier(random_state=666))],
voting='soft')
vote_clf.fit(X_train,y_train)
print("集成算法Soft方式得分:",vote_clf.score(X_test,y_test))
随机生成的数据:

下图所示的两个矩阵一个是复合算法预测出来的数据矩阵,一个是真实的label数据矩阵。
以及算法的得分比较。

|