Getting Data


In [2]:
import os 
import requests 

DATASET = (
    "https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data",
    "https://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.names"
)

def download_data(path='data', urls=DATASET):
    if not os.path.exists(path):
        os.mkdir(path) 
    
    for url in urls:
        response = requests.get(url)
        name = os.path.basename(url) 
        with open(os.path.join(path, name), 'wb') as f: 
            f.write(response.content)

download_data()

Load Data


In [5]:
import pandas as pd

columns = [
    "sex",
    "length",
    "diameter",
    "height",
    "wweight",
    "shuweight",
    "vweight",
    "sheweight",
    "rings"
]

data = pd.read_csv('data/abalone.data', names=columns)

Check it out


In [7]:
data.head(10)


Out[7]:
sex length diameter height wweight shuweight vweight sheweight rings
0 M 0.455 0.365 0.095 0.5140 0.2245 0.1010 0.150 15
1 M 0.350 0.265 0.090 0.2255 0.0995 0.0485 0.070 7
2 F 0.530 0.420 0.135 0.6770 0.2565 0.1415 0.210 9
3 M 0.440 0.365 0.125 0.5160 0.2155 0.1140 0.155 10
4 I 0.330 0.255 0.080 0.2050 0.0895 0.0395 0.055 7
5 I 0.425 0.300 0.095 0.3515 0.1410 0.0775 0.120 8
6 F 0.530 0.415 0.150 0.7775 0.2370 0.1415 0.330 20
7 F 0.545 0.425 0.125 0.7680 0.2940 0.1495 0.260 16
8 M 0.475 0.370 0.125 0.5095 0.2165 0.1125 0.165 9
9 F 0.550 0.440 0.150 0.8945 0.3145 0.1510 0.320 19

In [8]:
data.describe()


Out[8]:
length diameter height wweight shuweight vweight sheweight rings
count 4177.000000 4177.000000 4177.000000 4177.000000 4177.000000 4177.000000 4177.000000 4177.000000
mean 0.523992 0.407881 0.139516 0.828742 0.359367 0.180594 0.238831 9.933684
std 0.120093 0.099240 0.041827 0.490389 0.221963 0.109614 0.139203 3.224169
min 0.075000 0.055000 0.000000 0.002000 0.001000 0.000500 0.001500 1.000000
25% 0.450000 0.350000 0.115000 0.441500 0.186000 0.093500 0.130000 8.000000
50% 0.545000 0.425000 0.140000 0.799500 0.336000 0.171000 0.234000 9.000000
75% 0.615000 0.480000 0.165000 1.153000 0.502000 0.253000 0.329000 11.000000
max 0.815000 0.650000 1.130000 2.825500 1.488000 0.760000 1.005000 29.000000

Features and Targets


In [9]:
y = data["rings"]

In [10]:
y


Out[10]:
0       15
1        7
2        9
3       10
4        7
5        8
6       20
7       16
8        9
9       19
10      14
11      10
12      11
13      10
14      10
15      12
16       7
17      10
18       7
19       9
20      11
21      10
22      12
23       9
24      10
25      11
26      11
27      12
28      15
29      11
        ..
4147    11
4148    11
4149     6
4150     7
4151     6
4152     7
4153     8
4154     6
4155     6
4156     8
4157     8
4158     8
4159     9
4160    11
4161    11
4162     8
4163     7
4164     7
4165     7
4166    10
4167     9
4168     8
4169    10
4170    10
4171     8
4172    11
4173    10
4174     9
4175    10
4176    12
Name: rings, Length: 4177, dtype: int64

In [15]:
X = data.iloc[:,1:-1]
X


Out[15]:
length diameter height wweight shuweight vweight sheweight
0 0.455 0.365 0.095 0.5140 0.2245 0.1010 0.1500
1 0.350 0.265 0.090 0.2255 0.0995 0.0485 0.0700
2 0.530 0.420 0.135 0.6770 0.2565 0.1415 0.2100
3 0.440 0.365 0.125 0.5160 0.2155 0.1140 0.1550
4 0.330 0.255 0.080 0.2050 0.0895 0.0395 0.0550
5 0.425 0.300 0.095 0.3515 0.1410 0.0775 0.1200
6 0.530 0.415 0.150 0.7775 0.2370 0.1415 0.3300
7 0.545 0.425 0.125 0.7680 0.2940 0.1495 0.2600
8 0.475 0.370 0.125 0.5095 0.2165 0.1125 0.1650
9 0.550 0.440 0.150 0.8945 0.3145 0.1510 0.3200
10 0.525 0.380 0.140 0.6065 0.1940 0.1475 0.2100
11 0.430 0.350 0.110 0.4060 0.1675 0.0810 0.1350
12 0.490 0.380 0.135 0.5415 0.2175 0.0950 0.1900
13 0.535 0.405 0.145 0.6845 0.2725 0.1710 0.2050
14 0.470 0.355 0.100 0.4755 0.1675 0.0805 0.1850
15 0.500 0.400 0.130 0.6645 0.2580 0.1330 0.2400
16 0.355 0.280 0.085 0.2905 0.0950 0.0395 0.1150
17 0.440 0.340 0.100 0.4510 0.1880 0.0870 0.1300
18 0.365 0.295 0.080 0.2555 0.0970 0.0430 0.1000
19 0.450 0.320 0.100 0.3810 0.1705 0.0750 0.1150
20 0.355 0.280 0.095 0.2455 0.0955 0.0620 0.0750
21 0.380 0.275 0.100 0.2255 0.0800 0.0490 0.0850
22 0.565 0.440 0.155 0.9395 0.4275 0.2140 0.2700
23 0.550 0.415 0.135 0.7635 0.3180 0.2100 0.2000
24 0.615 0.480 0.165 1.1615 0.5130 0.3010 0.3050
25 0.560 0.440 0.140 0.9285 0.3825 0.1880 0.3000
26 0.580 0.450 0.185 0.9955 0.3945 0.2720 0.2850
27 0.590 0.445 0.140 0.9310 0.3560 0.2340 0.2800
28 0.605 0.475 0.180 0.9365 0.3940 0.2190 0.2950
29 0.575 0.425 0.140 0.8635 0.3930 0.2270 0.2000
... ... ... ... ... ... ... ...
4147 0.695 0.550 0.195 1.6645 0.7270 0.3600 0.4450
4148 0.770 0.605 0.175 2.0505 0.8005 0.5260 0.3550
4149 0.280 0.215 0.070 0.1240 0.0630 0.0215 0.0300
4150 0.330 0.230 0.080 0.1400 0.0565 0.0365 0.0460
4151 0.350 0.250 0.075 0.1695 0.0835 0.0355 0.0410
4152 0.370 0.280 0.090 0.2180 0.0995 0.0545 0.0615
4153 0.430 0.315 0.115 0.3840 0.1885 0.0715 0.1100
4154 0.435 0.330 0.095 0.3930 0.2190 0.0750 0.0885
4155 0.440 0.350 0.110 0.3805 0.1575 0.0895 0.1150
4156 0.475 0.370 0.110 0.4895 0.2185 0.1070 0.1460
4157 0.475 0.360 0.140 0.5135 0.2410 0.1045 0.1550
4158 0.480 0.355 0.110 0.4495 0.2010 0.0890 0.1400
4159 0.560 0.440 0.135 0.8025 0.3500 0.1615 0.2590
4160 0.585 0.475 0.165 1.0530 0.4580 0.2170 0.3000
4161 0.585 0.455 0.170 0.9945 0.4255 0.2630 0.2845
4162 0.385 0.255 0.100 0.3175 0.1370 0.0680 0.0920
4163 0.390 0.310 0.085 0.3440 0.1810 0.0695 0.0790
4164 0.390 0.290 0.100 0.2845 0.1255 0.0635 0.0810
4165 0.405 0.300 0.085 0.3035 0.1500 0.0505 0.0880
4166 0.475 0.365 0.115 0.4990 0.2320 0.0885 0.1560
4167 0.500 0.380 0.125 0.5770 0.2690 0.1265 0.1535
4168 0.515 0.400 0.125 0.6150 0.2865 0.1230 0.1765
4169 0.520 0.385 0.165 0.7910 0.3750 0.1800 0.1815
4170 0.550 0.430 0.130 0.8395 0.3155 0.1955 0.2405
4171 0.560 0.430 0.155 0.8675 0.4000 0.1720 0.2290
4172 0.565 0.450 0.165 0.8870 0.3700 0.2390 0.2490
4173 0.590 0.440 0.135 0.9660 0.4390 0.2145 0.2605
4174 0.600 0.475 0.205 1.1760 0.5255 0.2875 0.3080
4175 0.625 0.485 0.150 1.0945 0.5310 0.2610 0.2960
4176 0.710 0.555 0.195 1.9485 0.9455 0.3765 0.4950

4177 rows × 7 columns


In [18]:
from sklearn.ensemble import RandomForestRegressor as rfr

estimator = rfr(n_estimators=7)
estimator.fit(X,y)


Out[18]:
RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,
           max_features='auto', max_leaf_nodes=None,
           min_impurity_decrease=0.0, min_impurity_split=None,
           min_samples_leaf=1, min_samples_split=2,
           min_weight_fraction_leaf=0.0, n_estimators=7, n_jobs=1,
           oob_score=False, random_state=None, verbose=0, warm_start=False)

In [19]:
y_hat = estimator.predict(X)
print(y_hat)


[15.          6.85714286  8.85714286 ... 10.71428571 10.
 12.        ]

In [ ]: