import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

from sklearn.linear\_model import LinearRegression
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
data = pd.read\_csv('./training data.txt')
data.head(5)
  • 1.
  • 2.

【机器学习】随机梯度下降-理解与使用_ai

# 数据映射
for col in data.columns\[0:1\]:  # 遍历所有类名
#     print(col) 
    u = data\[col\].unique()  #  得出每个分类下面的种类名称

    def convert(x):  # 将上面得出的u 进行索引映射

        return np.argwhere(u == x)\[0,0\]  #  将上面得出的u 进行索引映射
    
    data\[col\] \= data\[col\].map(convert)  # 将上面得出的u 进行索引映射
data.head(5)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

【机器学习】随机梯度下降-理解与使用_人工智能_02

# 数据分类   data.iloc\[\[行\],\[列\]
X = data.iloc\[:,\[1,2\]\]
X.head()
print(type(X))
X.head()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

【机器学习】随机梯度下降-理解与使用_ai_03

# 数据分类
y = data\['Gender'\]
print(type(y))
y.head()
  • 1.
  • 2.
  • 3.
  • 4.

【机器学习】随机梯度下降-理解与使用_深度学习_04

# 切分训练集跟测试集
from sklearn.model\_selection import train\_test\_split

X\_train,X\_test,y\_train,y\_test \= train\_test\_split(X,y,test\_size = 0.2)  # 切分
print("训练集大小",X\_train.shape,y\_train.shape)
print("测试集大小",X\_test.shape,y\_test.shape)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

【机器学习】随机梯度下降-理解与使用_深度学习_05

# 2: 梯度下降
from sklearn.linear\_model import LinearRegression
from pylab import mpl
mpl.rcParams\['font.sans-serif'\] = \['FangSong'\] # 指定默认字体
mpl.rcParams\['axes.unicode\_minus'\] = False # 解决保存图像是负号'-'显示为方块的问题
  
# 随机梯度下降  要先对数据进行归一化处理
from sklearn.linear\_model import SGDRegressor

from sklearn.preprocessing import StandardScaler

# 归一化数据
std = StandardScaler()
std.fit(X\_train) # 计算训练集X数据
X\_train\_std \= std.transform(X\_train) # 得出归一化训练集X上的归一化值
X\_test\_std = std.transform(X\_test)   # 得出归一化测试集X上的归一化值

print(X\_train\_std,X\_test\_std)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

【机器学习】随机梯度下降-理解与使用_ai_06

# n\_iter代表浏览多少次,默认是5
sgd\_reg = SGDRegressor(n\_iter=100) # 梯度下降对象实例
sgd\_reg.fit(X\_train\_std, y\_train) # 归一化值X训练集 与  y训练集 进行计算训练
res \= sgd\_reg.score(X\_test\_std, y\_test) # 比较y预测值跟训练之的对比值
print("随机梯度下降预测准确率为:",res)

y\_test\_std \= sgd\_reg.predict(X\_test\_std)  # 预测值
y\_test\_std
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

【机器学习】随机梯度下降-理解与使用_人工智能_07

# 梯度下降预测集图
y\_data = np.array(y\_test\_std)
x\_data \= np.arange(1,len(y\_test)+1)

z\=np.arange(1,len(y\_test)+1)
m\=np.array(\[0.5\]\*len(y\_test))
plt.plot(z,m,label\="分割线",color='red')

plt.xlabel("人数")
plt.ylabel("预测性别")
plt.title("大于0.5的是男性,小于0.5的是女性")


plt.scatter(x\_data,y\_data)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

【机器学习】随机梯度下降-理解与使用_语言模型_08