sklaern

建模型基本流程

数据预处理

# 标准化处理
# 特征值处理
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_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值