建模型基本流程
数据预处理
# 标准化处理
# 特征值处理
std_x = StandardScaler()
x_train = std_x.fit_transform(x_train)
x_test = std_x.transform(x_test)
# 目标值进行处理
std_y = StandardScaler()
y_train = std_y.fit_transform(y_train.reshape(-1,1))
y_test = std_y.transform(y_test.reshape(-1,1))
y_lr_predict = std_y.inverse_transform(y_lr_predict)#反转回原数据
scale = MinMaxScaler().fit(iris_data)## 数据归一化
iris_dataScale = scale.transform(iris_data) ## 应用规则
#分类标签
from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])
#哑变量
from sklearn.preprocessing import OneHotEncoder
OneHotEncoder(categories 'auto').fit_transform(X).toarray()
pd.DataFrame(enc.inverse_transform(result))
enc.get_feature_names()
#连续型
from sklearn.preprocessing import KBinsDiscretizer
#训练集,测试集划分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.1,random_state=1)
#交叉验证
from sklearn.model_selection import cross_val_predict
predicted = cross_val_predict(linreg, X, y, cv=10)
score_pre = cross_val_score(linreg, X, y,cv=10).mean()
1.线性模型
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(X_train, y_train)#训练
y_pred = linreg.predict(X_test)
print(linreg.intercept_) #查看截距 theta0
print(linreg.coef_)#求得的系数。
2.决策树
from sklearn import tree #导入需要的模块
clf = tree.DecisionTreeClassifier() #实例化 i
clf = clf.fit(X_train,y_train) #用训练集数据训练模型
result = clf.score(X_test,y_test) #导入测试集,从接口中调用需要的信息
#参数
criterion 默认为gini
random_state=123 #控制随机性
splitter=best/random#random会加入更多信息,防止过拟合
#剪枝参数
max_depth#建议从=3开始尝试
min_samples_leaf#一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,建议从=5开始使用,对于类别不多的分类问题,=1通常就是最佳选择。
min_samples_split#一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝
min_impurity_decrease#限制信息增益的大小
#不平衡样本加权值
class_weight
min_weight_fraction_leaf
#接口
clf.feature_importances_ #特征重要性
[*zip(feature_name,clf.feature_importances_)]
score = clf.score(Xtest, Ytest) #返回预测的准确度
调参
#学习曲线——有一些参数是没有参照的,很难说清一个范围,这种情况下我们使用学习曲线,
#看趋势从曲线跑出的结果中选取一个更小的区间,再跑曲线
import matplotlib.pyplot as plt
test = []
for i in range(10):
clf = tree.DecisionTreeClassifier(max_depth i+1
,criterion="entropy"
,random_state=30
,splitter="random" )
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
test.append(score)
plt.plot(range(1,11),test,color "red",label "max_depth")
plt.legend()
plt.show()
#有一些参数是可以找到一个范围的,或者说我们知道他们的取值和随着他们的取值,模型的整体准确率会如何变化,
#这样的参数我们就可以直接跑网格搜索
param_grid = {'max_depth':np.arange(1, 20, 1)}
rfc = RandomForestClassifier(n_estimators=39
,random_state=90)
GS = GridSearchCV(rfc,param_grid,cv 10)
GS.fit(data.data,data.target)
GS.best_params_
GS.best_score_
#绘制决策树
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")
3.随机森林
from sklearn.tree import RandomForestClassifier #导入需要的模块
rfc = RandomForestClassifier() #实例化
rfc = rfc.fit(X_train,y_train) #用训练集数据训练模型
result = rfc.score(X_test,y_test) #导入测试集,从接口中调用需要的信息
#参数
n_estimators#基评估器的数量
#接口
estimators_#查看随机森林中所有树的列表的
.oob_score_#袋外得分
.feature_importances_