python----机器学习练习题1

学习来源:http://fintech.ftwhale.com/home/courses/p08/lessons/ 机器学习部分
1.

# Step 1.从`sklearn.neighbors`导入`KNeighborsClassifier`。
from sklearn.neighbors import KNeighborsClassifier

# Step 2.为特征和目标变量创建数组`X`和`y`。
y = df['party'].values
X = df.drop('party', axis=1).values

# Step 3.创建一个具有6个近邻的K-NN分类器。
knn = KNeighborsClassifier(n_neighbors=6)

# Step 4.将数据传入分类器进行拟合。
knn.fit(X, y)

自学重点:
Step 3.创建一个具有6个近邻的K-NN分类器。

knn = KNeighborsClassifier(n_neighbors=6)

import numpy as np
import pandas as pd
# Step 2.将CSV文件读入DataFrame:df
df = pd.read_csv(os.path.join(data_path,'gapminder.csv'))

# Step 3.为要素和目标变量创建数组
y = df['life'].values     #已知csv文件中有life列和fertility列
X = df['fertility'].values

# Step 5.重塑X和y为 :1行
y = y.reshape(-1, 1)
X = X.reshape(-1, 1)

# Step 6.打印重塑后X和y的维度
print("Dimensions of y after reshaping: {}".format(y.shape))
print("Dimensions of X after reshaping: {}".format(X.shape))

自学重点:
Step 3.为要素和目标变量创建数组

y = df[‘life’].values #已知csv文件中有life列和fertility列
X = df[‘fertility’].values

# Step 1.导入LinearRegression
from sklearn.linear_model import LinearRegression 

# Step 2.创建回归模型:reg
reg = LinearRegression()

# Step 3.创建预测空间
#创建预测时特征'fertility'的取值,为变量X_fertility的最小值到最大值之间平均取50个值。
prediction_space = np.linspace(min(X_fertility), max(X_fertility)).reshape(-1,1)

# Step 4.使模型适合数据
reg.fit(X_fertility, y)

# Step 5.计算预测空间的预测:y_pred
y_pred = reg.predict(prediction_space)

# Step 6.打印 R^2 
print(reg.score(X_fertility, y))

# Step 7.绘制回归线
plt.plot(prediction_space, y_pred, color='black', linewidth=3)
plt.savefig('demo.pdf')
'''
决定系数R²是趋势线拟合程度的指标,它的数值大小可以反映趋势线的估计值与对应的实际数据之间的
拟合程度,拟合程度越高,趋势线的可靠性就越高。计算公式为:R²=回归平方和(ssreg)/总平方和
(sstotal)=((y_true-y_pred) 2).sum()/((y_true - y_true.mean()) 2).sum(),y_true是真
实的y取值,y_pred是预测是y取值】
'''

自学重点:
Step 6. ( .score用法)

print(reg.score(X_fertility, y))

# Step 1.导入必要的模块
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
# Step 2.创建训练和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=42)

# Step 3.创建回归量:reg_all
reg_all = LinearRegression()

# Step 4.使回归适合训练数据
reg_all.fit(X_train, y_train)

# Step 5.预测测试数据:y_pred
y_pred = reg_all.predict(X_test)

# Step 6.计算并打印R ^ 2和RMSE
print("R^2: {}".format(reg_all.score(X_test, y_test)))
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print("Root Mean Squared Error: {}".format(rmse))
'''
mean_squared_error()计算的是均方误差(MSE),是观测值与真值偏差的平方与观测次数n比
值】,然后使用np.sqrt()【np.sqrt()是开平方根的意思,比如np.sqrt(4),输出2】获取其平方根,
就得到了均方根差(RMSE)的取值。
'''

自学重点:
Step 2.创建训练和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=42)

# Step 1.导入必要的模块
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score

# Step 2.创建一个线性回归对象:reg
reg = LinearRegression()

# Step 3.计算5倍交叉验证分数:cv_scores
cv_scores = cross_val_score(reg, X, y, cv=5)

# Step 4.打印5倍交叉验证分数
print(cv_scores)

print("Average 5-Fold CV Score: {}".format(np.mean(cv_scores)))
'''Step 4.计算并打印平均交叉验证分数【5次交叉验证则会输出5个模型分别对应的决定系数R²的值】。 
可以使用NumPy的mean()函数来计算平均值【对5次交叉验证得到的5个决定系数R²进行取均值,
作为对该算法准确性的估计】。'''

自学重点:
Step 3.计算5倍交叉验证分数:cv_scores

cv_scores = cross_val_score(reg, X, y, cv=5)
5次交叉验证就是将数据集分成5份,轮流将其中4份作为训练数据,1份作为测试数据,进行试验】。5次交叉验证会输出5个模型分别对应的决定系数R²的值

# Step 1.导入必要的模块
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score

# Step 2.创建一个线性回归对象:reg
reg = LinearRegression()

# Step 3.执行3倍CV
cvscores_3 = cross_val_score(reg, X, y, cv=3)
print(np.mean(cvscores_3))

# Step 4.执行10倍CV
cvscores_10 = cross_val_score(reg, X, y, cv=10)
print(np.mean(cvscores_10))

自学重点:
Step 3.执行3倍CV

cvscores_3 = cross_val_score(reg, X, y, cv=3) #不是cvscores_3 = cross_val_score(X, y, cv=3)
print(np.mean(cvscores_3))

from sklearn.neighbors import KNeighborsClassifier
# Step 1.导入必要的模块。
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

# Step 2.创建训练集和测试集。
X_train, X_test, y_train, y_test =train_test_split(X,y,test_size=0.4,random_state=42

# Step 3.创建K-NN分类器。
knn = KNeighborsClassifier(n_neighbors=6)

# Step 4.使用分类器拟合训练集数据。
kknn.fit(X_train,y_train)

# Step 5.预测测试集的分类标签。
y_pred = knn.predict( X_test)

# Step 6.生成混淆矩阵和分类报告。
print(confusion_matrix(y_pred, y))
print(classification_report(y_pred, y))
# Step 1.导入 Lasso
from sklearn.linear_model import Lasso

# Step 2.实例化套索回归量:lasso
lasso = Lasso(alpha=0.4, normalize=True)

# Step 3.使回归适合数据
fit = lasso.fit(X, y)

# Step 4.计算并打印系数
lasso_coef = lasso.coef_
print(lasso_coef)

# Step 5.绘制系数
plt.plot(range(len(df_columns)), lasso_coef)
plt.xticks(range(len(df_columns)), df_columns.values, rotation=60)
plt.margins(0.02)
plt.savefig('demo.pdf')

为了解决普通线性回归过拟合的问题,可使用正则化【正则化就是在原来模型的基础上添加一些约束条件】预防过拟合。【Lasso是在普通回归的损失函数的基础上增加了一个约束,然而一部分特征的回归系数刚好可以被约束为0.的话,就达到了特征选择的效果。 】 lasso 链接:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html
8.

# Step 1.导入必要的模块
from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score

# Step 2.设置alpha和列表数组以存储分数
alpha_space = np.logspace(-4, 0, 50)
ridge_scores = []
ridge_scores_std = []

# Step 3.创建一个岭回归:ridge
ridge = Ridge(normalize=True) #normalize=True代表数据在使用时需要被归一化】。

# Step 4.计算alpha范围内的分数
for alpha in alpha_space:

    # Step 5.指定要使用的alpha值:ridge.alpha
    ridge.alpha = alpha
    
    # Step 6.执行10倍CV:ridge_cv_scores
    ridge_cv_scores = cross_val_score(ridge, X, y, cv=10)
    
    # Step 7.将ridge_cv_scores的平均值附加到ridge_scores
    ridge_scores.append(np.mean(ridge_cv_scores))#计算交叉验证分数的平均值
    
    # Step 8.将ridge_cv_scores的std追加到ridge_scores_std
    ridge_scores_std.append(np.std(ridge_cv_scores))

# Step 9.显示图表
display_plot(ridge_scores, ridge_scores_std)

用岭回归也可以预防过拟合,岭回归有一定平滑度,而且随着着alpha值的增大,回归系数永远也不会变为0。
9.

# Step 1.导入必要的模块。
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split

# Step 2.创建训练集和测试集。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4, random_state = 42)

# Step 3.创建K-NN分类器。
knn = KNeighborsClassifier(n_neighbors = 6)

# Step 4.使用分类器拟合训练集数据。
knn.fit(X_train, y_train)

# Step 5.预测测试集的分类标签。
y_pred = knn.predict(X_test)

# Step 6.生成混淆矩阵和分类报告。
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

Step 6.生成混淆矩阵和分类报告。
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
用法:
confusion_matrix(y_true, y_pred)
classification_report(y_true, y_pred)

你可能感兴趣的:(机器学习)