#include
#include
#include
#include
#include
using namespace std;
// structure for holding data from cars.csv
struct car_data
{
vector headers; // stores the headers
int N_rows; // stores number of rows
...
#include
#include
#include
#include
#include
using namespace std;
// structure for holding data from cars.csv
struct car_data
{
vector headers; // stores the headers
int N_rows; // stores number of rows
// data in the 8 columns in cars.csv
vector mpg;
vector cylinders;
vector cubicinches;
vector hp;
vector weightlbs;
vector time260;
vector year;
vector region;
vector clusters; // cluster 1,2,3 that car is assigned to
};
void read_csv(ifstream &fin, car_data &dat); // read data from cars.csv into
struct car_data
void normalize(car_data &data_norm);// normalize data
void unnormalize(car_data &data_norm,car_data &data); // take normalized
data_norm and unnormalize it using max/min values from data
void initialize(car_data ¢roids); // give random initial values for
centroids
double distance(car_data data, car_data centroids, int carIndex, int
centroidIndex);
double check_convergence(const car_data ¢roids, const car_data
¢roids_old); // find sum of squares difference between old and new centroids
void assign_clusters(const car_data ¢roids, car_data &data_norm); // for
each mpg, etc. find nearest cluster
void find_new_centroids(car_data ¢roids, const car_data &data_norm); // find
average position for each cluster to define new centroids
void print(ostream &fout, car_data &data); // print to cout or file (ostream can
be either)
double minVec(vector a);
double maxVec(vector a);
int main()
{
car_data data;
ifstream fin("cars.csv");
// Step 1 - read in data and verify
read_csv(fin, data);
data.headers.pop_back();
data.headers.push_back(" cluster");
//print(cout,data); // good to check output for debugging
fin.close();
// Step 2 - Normalize vectors - only columns 1-7
car_data data_norm = data;
normalize(data_norm);
//print(data_no
[Show More]