sklearn机器学习之回归预测的算法应用

只讲述应用方法,具体数学原理自行查阅。。

linear_model最小二乘线性回归

注意:fit(x,y)之前并未对x进行归一化,测试时可以提前进行归一化,各特征属性量尺寸不宜相差过大。

在使用模型时只需要更改train_df的数据选择,X代表训练集的特征向量,y代表训练集的结果数据。

测试时只需更改test数据选择即可,predictions代表回归预测输出,arg为y与x的系数关系


#将feature字段取出,转换成numpy格式
from sklearn import linear_model
##交叉验证的包
from sklearn.model_selection import cross_val_score, train_test_split
##用正则取出我们的属性值
train_df=df.filter(regex='Survived|Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')  ##这是特征向量,是训练的x,可以进行更改
train_np = train_df.values  #将series类型转换成numpy
#print(type(train_df),type(train_np))
# print(type(data_train))
#y代表生存情况
y=train_np[:,0]
##x即为之后的特征值
X=train_np[:,1:]
#fit到回归之中
clf=linear_model.LogisticRegression(solver='liblinear',C=1.0, penalty='l1', tol=1e-6)
clf.fit(X, y)
arg=pd.DataFrame({"columns":list(train_df.columns)[1:], "coef":list(clf.coef_.T)})##列出y与x的系数关系

##取数据进行预测
test = df_test.filter(regex='Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
predictions = clf.predict(test)
acc_log = round(clf.score(X, y) * 100, 2)##测试模型得分
#交叉验证
print(cross_val_score(clf, X, y, cv=5)) ##会输出5个测试准确率

RandomForestRegressor随机森林模型

使用RandomForestRegressor过程中,只需要更改训练集,测试集数据即可进行修改 预测

from sklearn.ensemble import RandomForestRegressor
import pandas as pd
from sklearn.model_selection import cross_val_score, train_test_split
##简单的数据处理提取
age_df=df[['Age','Fare','Parch','SibSp','Pclass']]
#known_age=age_df[age_df.Age.notnull()].as_matrix()
known_age = age_df[age_df.Age.notnull()].values
unknown_age=age_df[age_df.Age.isnull()].values

y=known_age[:,0]
##X为特征属性值
X=known_age[:,1:]
#fit到random forest
rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
rfr.fit(X, y)
# 用得到的模型进行未知年龄结果预测
predictedAges = rfr.predict(unknown_age[:, 1:])
# 用得到的预测结果填补原缺失数据
df.loc[(df.Age.isnull()), 'Age'] = predictedAges
#交叉验证
print(cross_val_score(rlf, X, y, cv=5)) ##会输出5个测试准确率

RandomForestClassifier多用于分类划分预测回归

##开始建立模型,随机森林预测
from sklearn.ensemble import RandomForestClassifier ##
rf = RandomForestClassifier(n_estimators=150,min_samples_leaf=2,max_depth=6,oob_score=True)
rf.fit(train_data_X,train_data_Y)
rf.oob_score_ ##包外评估分数

test_data_X=test_data_X.drop(['Name','Ticket'],axis=1)
test["Survived"] = rf.predict(test_data_X)

xgbboost回归预测算法。

params代表所调试参数max_depth,具体使用时,可将params灵活改动使用

from xgboost import XGBRegressor
params = [1,2,3,4,5,6]
test_scores = []
for param in params:
    clf = XGBRegressor(max_depth=param)
    test_score = np.sqrt(-cross_val_score(clf, X_train, y_train, cv=10, scoring='neg_mean_squared_error'))##交叉验证分数
    test_scores.append(np.mean(test_score))
import matplotlib.pyplot as plt
# %matplotlib inline
plt.plot(params, test_scores)
plt.title("max_depth vs CV Error");

BaggingRegressor集成回归

使用bagging可以集成多个基回归预测器,ridge是线性回归的一个基础模型,可以作为更改

from sklearn.linear_model import Ridge #ridge是线性回归中的一个模型
ridge = Ridge(15)
from sklearn.ensemble import BaggingRegressor
from sklearn.model_selection import cross_val_score
#在这里,我们用CV结果来测试不同的分类器个数对最后结果的影响。
#注意,我们在用Bagging的时候,要把它的函数base_estimator里填上小分类器(ridge)
params = [1, 10, 15, 20, 25, 30, 40]
test_scores = []
for param in params:
    clf = BaggingRegressor(n_estimators=param, base_estimator=ridge) ##集成多个基分预测回归器的模型
    test_score = np.sqrt(-cross_val_score(clf, X_train, y_train, cv=10, scoring='neg_mean_squared_error'))
    test_scores.append(np.mean(test_score))
import matplotlib.pyplot as plt
# %matplotlib inline
plt.plot(params, test_scores) 
plt.title("n_estimator vs CV Error")

 

 

 

 

 

 

 

你可能感兴趣的:(Python数据分析处理,机器学习,sklearn)