机器学习笔记2:线性回归、逻辑回归

机器学习本周讲的是线性回归、逻辑回归
原理见上一篇博客:https://www.cnblogs.com/bugutian/p/11123484.html
课程资料:https://github.com/GreedyAIAcademy/Machine-Learning

线性回归

其他的前面都学了,新的知识

1. 可以使用tushare爬取股票代码

import tushare as ts
df = ts.get_hist_data('000001')
print(df)
df.to_csv('000001.csv')

2. 零散的小知识

plotly.graph_objs : 可画股票的K线图
np.shape(df) 矩阵又多少行多少列如(611,14)
reshape() 将多维数组编程一维数组
df['label'] = df['close'].shift(-num) 用shift将结果上移num条记录

逻辑回归

逻辑回归的操作步骤

  • 步骤1:分析数据
  • 步骤2:数据预处理
  • 步骤3:训练模型进行预测

分析数据

分析数据的字段,确定那些因素是良好的预测因素

数据预处理

  1. 缺失数据处理
  • 删除: 缺失数据少时删除行,缺失数据多时删除列
  • 取平均值: 用平均值代替缺失值
  • 取中位数: 用中位数代替缺失值
    到底选用中替代方法,不能排脑袋决定,选哪种方法,主要看哪种可能和结果关联度大
  1. 过采样
    如果数据不平衡,如y=0的数据量是y=1数据量的10倍,此时需要用到过采样,过采样的结果使二元结果的数据量为1:1.

训练模型进行预测

都一样。

logreg = LogisticRegression()
logreg.fit(os_data_X, os_data_y.values.reshape(-1))
y_pred = logreg.predict(X_test)
logreg.score(X_test, y_test)

作业题

地址:https://github.com/GreedyAIAcademy/Machine-Learning/tree/master/3.LinearRegression.LogisticRegression/homework

1. 处理其他数据的方法

由于其他数据只是缺失1两条信息,因此将这些数据删除

data = data.dropna()
data.isnull().sum()

2. 过采样处理

from imblearn.over_sampling import SMOTE
os = SMOTE(random_state=0)
columns = X_train.columns
os_data_X,os_data_y=os.fit_sample(X_train, y_train)
os_data_X = pd.DataFrame(data=os_data_X,columns=columns )
os_data_y= pd.DataFrame(data=os_data_y,columns=['survived'])
# we can Check the numbers of our data
print("过采样以后的数据量: ",len(os_data_X))
print("未生还数: ",len(os_data_y[os_data_y['survived']==0]))
print("生还数: ",len(os_data_y[os_data_y['survived']==1]))
print("未生还的百分比: ",len(os_data_y[os_data_y['survived']==0])/len(os_data_X))
print("生还的百分比: ",len(os_data_y[os_data_y['survived']==1])/len(os_data_X))
```python
### 3. 训练和预测
```python
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
logreg = LogisticRegression()
logreg.fit(os_data_X, os_data_y.values.reshape(-1))
y_pred = logreg.predict(X_test)
print("准确率为 %2.3f" % accuracy_score(y_test, y_pred))

准确率为 0.794

4. 不过采样结果

logreg2 = LogisticRegression()
logreg2.fit(X_train, y_train)
y_pred2 = logreg2.predict(X_test)
print("准确率为 %2.3f" % accuracy_score(y_test, y_pred2))

准确率为 0.817
可见过采样之后的准确率不一定高。

原文地址:https://www.cnblogs.com/bugutian/p/11153212.html